Submission #803973

#TimeUsernameProblemLanguageResultExecution timeMemory
803973dungzKralj (COCI16_kralj)C++17
56 / 140
2071 ms80308 KiB
#pragma GCC optimize ("O2") #include<bits/stdc++.h> using namespace std; #define ll long long #define fi first #define se second #define endl '\n' #define task "task" #define task "task" #define prll pair<ll,ll> #define pb push_back #define ld long double const ll MIN=-1e18,MAX=1e18,MOD=1e9+7; vector<ll> f[500005]; int n,st2; ll pos[500005]; ll val[500005]; set<ll> fuck,fuck2; ll con(ll x){ ll temp=x%n; if(temp==0) return n; else return temp; } int main(){ // #ifndef ONLINE_JUDGE // freopen (task".inp", "r", stdin); // freopen (task".out", "w", stdout); // #endif ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n; for(int i=1;i<=n;i++) { cin>>pos[i]; st2=pos[i]; } for(int i=1;i<=n;i++) { cin>>val[i]; } for(int i=1;i<=n;i++) { int x; cin>>x; f[pos[i]].push_back(x); } for(int i=1;i<=n;i++) { sort(f[i].begin(),f[i].end()); } int st=st2; int ed=st2; int rem=f[st2].size()-1; st2=con(st2+1); while(st2!=ed) { rem+=f[st2].size()-1; if(rem<0) { st=-1; rem=0; } else if(st==-1) { st=st2; } st2=con(st2+1); } ed=st; fuck.insert(val[st]); for(auto i:f[st]) fuck2.insert(i); ll ans=0,dem=1; st=con(st+1); while(st!=ed) { // cout<<val[st]<<" "; if(f[st].size()!=0) { for(auto i:fuck) { auto pos=fuck2.lower_bound(i); if(pos!=fuck2.end()) { dem--; ans+=1; fuck2.erase(pos); } } while(dem) { fuck2.erase(fuck2.begin()); dem--; } for(auto i:f[st]) { fuck2.insert(i); } dem=0; } fuck.insert(val[st]); dem++; st=con(st+1); } for(auto i:fuck) { auto pos=fuck2.lower_bound(i); if(pos!=fuck2.end()) { ans+=1; fuck2.erase(pos); } } cout<<ans; } /* */
#Verdict Execution timeMemoryGrader output
Fetching results...