Submission #1313100

#TimeUsernameProblemLanguageResultExecution timeMemory
1313100boclobanchatMoney (IZhO17_money)C++20
0 / 100
0 ms332 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=1e6+5; int A[MAXN],fen[MAXN]; int getlog(long long n) { return 63-__builtin_clzll(n); } void update(int i,int n,int val) { for(;i<=n;i+=i&-i) fen[i]+=val; } int get(int i) { int ans=0;for(;i;i-=i&-i) ans+=fen[i];return ans; } int walk(int n,int val) { if(val==0) return -1; int ans=0; for(int i=getlog(n);i+1;i--) if(ans+(1<<i)<=n&&val>fen[ans+(1<<i)]) val-=fen[ans+=(1<<i)]; return ans+1; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i=1;i<=n;i++) { cin>>A[i]; update(A[i],1e6,1); } int ans=1; bool beg=false; for(int i=n-1;i;i--) { bool nw=false; update(A[i+1],1e6,-1); if(!beg&&A[i]!=A[i+1]) { int pos=walk(1e6,get(A[i+1]-1)); if(pos!=A[i]) ans++,nw=true; } beg=nw; } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...