Submission #1261251

#TimeUsernameProblemLanguageResultExecution timeMemory
1261251kl0989eTeams (IOI15_teams)C++20
0 / 100
50 ms14916 KiB
#include "teams.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define fi first #define se second #define pb push_back #define vi vector<int> #define vl vector<ll> #define pi pair<int, int> #define pl pair<ll,ll> #define all(x) (x).begin(),(x).end() int n; vi pbeg; vi pend; void init(int _n, int a[], int b[]) { n=_n; pbeg.resize(n+1,0); pend.resize(n+1,0); for (int i=0; i<n; i++) { pbeg[a[i]]++; pend[b[i]]++; } for (int i=0; i<n; i++) { pbeg[i+1]+=pbeg[i]; pend[i+1]+=pend[i]; } } int can(int m, int k[]) { sort(k,k+m); vector<pl> kk={{k[0],k[0]}}; vi sub={0}; for (int i=1; i<m; i++) { if (k[i]==kk.back().fi) { kk.back().se+=k[i]; } else { kk.pb({k[i],k[i]}); sub.pb(0); } } int prv=0; int pt=1; int cnt=0; for (int i=0; i<kk.size(); i++) { cnt+=pbeg[kk[i].fi]-pbeg[prv]; cnt-=pend[kk[i].fi-1]-pend[prv]-sub[i]; if (cnt<kk[i].se) { return 0; } cnt-=kk[i].se; pt=max(pt,i+1); prv=kk[i].fi; while (kk[i].se && pt<kk.size()) { ll v=min(kk[i].se,1ll*pend[kk[pt].fi-1]-pend[kk[pt-1].fi]-sub[pt]); sub[pt]+=v; kk[i].se-=v; if (sub[pt]==pend[kk[pt].fi-1]-pend[kk[pt-1].fi]) { pt++; } } } return 1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...