记录编号 597152 评测结果 AAAAAEAAAW
题目名称 又是决斗 最终得分 80
用户昵称 Gravatarflyfree 是否通过 未通过
代码语言 C++ 运行时间 1.367 s
提交时间 2024-11-25 15:12:02 内存使用 11.94 MiB
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define MAXN 1000010
  5. inline ll read(){
  6. ll x=0,f=1;
  7. char c=getchar();
  8. while(c<'0'||c>'9'){
  9. if(c=='-')f=-1;
  10. c=getchar();
  11. }
  12. while(c>='0'&&c<='9'){
  13. x=x*10+c-'0';
  14. c=getchar();
  15. }
  16. return x*f;
  17. }
  18. ll t[MAXN],a[MAXN],n,sum[MAXN];
  19. bool cmp(ll a,ll b){
  20. return a>b;
  21. }
  22. struct node{
  23. ll h[MAXN],siz;
  24. void insert(ll x){
  25. h[++siz]=x;
  26. }
  27. void mk(){
  28. ll _siz=siz;
  29. sort(h+1,h+1+siz);
  30. for(int i=1;i<=_siz;i++){
  31. if(h[i]==h[i+1]){
  32. h[i]=0;
  33. siz--;
  34. }
  35. }
  36. sort(h+1,h+1+_siz,cmp);
  37. sort(h+1,h+1+siz);
  38. }
  39. ll find(ll x){
  40. ll l=1,r=siz;
  41. while(l<r){
  42. ll mid=(l+r+1)/2;
  43. if(h[mid]<=x)l=mid;
  44. else r=mid-1;
  45. }
  46. return l;
  47. }
  48. }pre;
  49. int main(){
  50. freopen("duela.in","r",stdin);
  51. freopen("duela.out","w",stdout);
  52. n=read();
  53. for(int i=1;i<=n;i++){
  54. a[i]=read();
  55. pre.insert(a[i]);
  56. // t[a]++;
  57. }
  58. pre.mk();
  59. for(int i=1;i<=n;i++){
  60. t[pre.find(a[i])]++;
  61. }
  62. for(int i=1;i<=pre.siz;i++){
  63. ll s=min(t[i],t[i-1]),q=0;
  64. t[i]-=s,t[i-1]-=s;
  65. if(t[i]){
  66. q=min(sum[i-1],t[i]/2);
  67. }
  68. t[i]=t[i]+t[i-1]-2*q;
  69. sum[i]=sum[i-1]+s+q;
  70. }
  71. cout<<t[pre.siz];
  72. return 0;
  73. }
  74.