Submission #888253

#TimeUsernameProblemLanguageResultExecution timeMemory
888253pccMoney (IZhO17_money)C++14
0 / 100
1 ms6616 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll,ll> #define pii pair<int,int> #define fs first #define sc second #define tlll tuple<ll,ll,ll> #define tiii tuple<int,int,int> const int mxn = 1e6+10; pii arr[mxn]; int n; int bit[mxn]; vector<int> all; int cnt[mxn]; void modify(int p,int val){ for(;p<mxn;p+=p&-p)bit[p] += val; return; } int getval(int p){ int re = 0; for(;p>0;p-= p&-p)re += bit[p]; return re; } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n; for(int i = 1;i<=n;i++){ cin>>arr[i].fs; all.push_back(arr[i].fs); arr[i].sc = ++cnt[arr[i].fs]; } sort(all.begin(),all.end()); all.resize(unique(all.begin(),all.end())-all.begin()); for(int i = 1;i<=n;i++){ arr[i].fs = lower_bound(all.begin(),all.end(),arr[i].fs)-all.begin()+1; } int ans = 0; for(int i = n;i>=1;){ int now = arr[i].fs-getval(arr[i].fs); int pt = i; int tval = arr[pt].fs-getval(arr[pt].fs); while(pt>0&&(tval == now||tval == now-1)){ now = tval; pt--; tval = arr[pt].fs-getval(arr[pt].fs); //cout<<pt<<":"<<tval<<endl; } //cout<<pt<<' '<<i<<":"<<tval<<','<<now<<endl; while(i>pt){ if(arr[i].sc == 1)modify(arr[i].fs,1); i--; } ans++; } 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...