求问做法正确性,感觉会被CCF卡掉
查看原帖
求问做法正确性,感觉会被CCF卡掉
1284815
canwen楼主2024/10/27 14:58

考场最后交的这么做的,洛谷A了但是快超时了。 记录:recond 很奇怪,最后想到 O(nlogn)O(nlogn) 做法但没打完\kk。

民间数据不强???

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define endl '\n'
const int N = 1e5 + 5;

int a[N],n;
bool pd[N];
int in(){
    char a = getchar();
    int k = 0, kk = 1;
    while(a>'9'||a<'0'){
        if(a=='-') kk=-1;
        a = getchar();
    }
    while(a>='0'&&a<='9'){
        k = k*10 + a - '0';
        a = getchar();
    }
    return k*kk;
}

signed main(){
//	freopen("duel3.in","r",stdin);
//	freopen("out.txt","w",stdout);
    n = in();
    rep(i,1,n) a[i] = in(); 
    sort(a+1,a+1+n);
    int can = 0;
    rep(i,1,n-1){
        int l = i+1, r = n+1;
        while(l<r){
            int mid = l+r>>1;
            if(a[mid]>a[i]) r = mid;
            else l = mid + 1; 
        }
        while(pd[l]&&l<=n) l++;
        if(l<=n){
        	pd[l] = 1;
        	can++;
		}
    }
    cout << n - can << endl;
    return 0;
}
/*
5
1 2 3 1 2*/
2024/10/27 14:58
加载中...