# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
307899 | 2020-09-29T13:51:59 Z | Pajaraja | Teams (IOI15_teams) | C++17 | 932 ms | 174608 KB |
#include "teams.h" #include <bits/stdc++.h> #define MAXN 500007 using namespace std; int per[25*MAXN],lc[25*MAXN],rc[25*MAXN],t,n,st[MAXN],dp[MAXN],m,nxt[MAXN],prv[MAXN],top,fas[MAXN]; vector<int> l[MAXN],v,c,z[MAXN]; void makeper(int l,int r,int ind) { if(l==r) return; int s=(l+r)/2; lc[ind]=++t; makeper(l,s,lc[ind]); rc[ind]=++t; makeper(s+1,r,rc[ind]); } void makenewper(int l,int r,int v,int ind,int inh) { per[ind]=per[inh]+1; if(l==r) return; int s=(l+r)/2; if(s>=v) { rc[ind]=rc[inh]; lc[ind]=++t; makenewper(l,s,v,lc[ind],lc[inh]); } else { lc[ind]=lc[inh]; rc[ind]=++t; makenewper(s+1,r,v,rc[ind],rc[inh]); } } int query(int l,int r,int lt,int rt,int ind) { if(l>=lt && r<=rt) return per[ind]; if(r<lt || l>rt) return 0; int s=(l+r)/2; return query(l,s,lt,rt,lc[ind])+query(s+1,r,lt,rt,rc[ind]); } void init(int N, int A[], int B[]) { n=N; for(int i=0;i<n;i++) l[B[i]].push_back(A[i]); makeper(1,n,t); int last=0; for(int i=n;i>=0;i--) { for(int j=0;j<l[i].size();j++) {int newlast=++t; makenewper(1,n,l[i][j],newlast,last); last=newlast;} st[i]=last; } } int overtake(int a,int b) { int l=b+1,r=m-1; if(dp[a]+query(1,n,v[a]+1,v[b],st[v[m-1]])>dp[b]) return m; while(l!=r) { int s=(l+r)/2; if(dp[a]+query(1,n,v[a]+1,v[b],st[v[s]])<=dp[b]) r=s; else l=s+1; } return l; } int can(int M, int K[]) { sort(K,K+M); v.clear(); c.clear(); //int sz=0; for(int i=0;i<M;i++) {sz+=K[i]; if(sz>n) return 0;} int cnt=0; v.push_back(0); c.push_back(0); for(int i=0;i<M;i++) { cnt++; if(i==M-1 || K[i]!=K[i+1]) {v.push_back(K[i]); c.push_back(cnt); cnt=0;} } m=v.size(); prv[0]=nxt[0]=-1; dp[0]=0; top=0; for(int i=0;i<=m;i++) z[i].clear(); for(int i=1;i<m;i++) { for(int j=0;j<z[i].size();j++) if(!fas[z[i][j]]) { int t=z[i][j]; if(t==top) {fas[top]=true; top=prv[t]; nxt[top]=-1; continue;} nxt[prv[t]]=nxt[t]; prv[nxt[t]]=prv[t]; z[max(i,overtake(prv[t],nxt[t]))].push_back(nxt[t]); fas[t]=true; } dp[i]=query(1,n,v[top]+1,v[i],st[v[i]])+dp[top]; fas[i]=false; nxt[i]=-1; prv[i]=top; nxt[top]=i; dp[i]-=c[i]*v[i]; if(dp[i]<0) return 0; while(dp[i]<dp[top]) {fas[top]=true; top=prv[top]; nxt[top]=i; prv[i]=top;} top=i; if(i!=m-1) z[overtake(prv[top],top)].push_back(top); } return 1; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 17 ms | 23808 KB | Output is correct |
2 | Correct | 17 ms | 23808 KB | Output is correct |
3 | Correct | 17 ms | 23936 KB | Output is correct |
4 | Correct | 18 ms | 23936 KB | Output is correct |
5 | Correct | 17 ms | 23936 KB | Output is correct |
6 | Correct | 17 ms | 23936 KB | Output is correct |
7 | Correct | 18 ms | 23936 KB | Output is correct |
8 | Correct | 18 ms | 23936 KB | Output is correct |
9 | Correct | 17 ms | 23936 KB | Output is correct |
10 | Correct | 17 ms | 23936 KB | Output is correct |
11 | Correct | 19 ms | 23936 KB | Output is correct |
12 | Correct | 17 ms | 23936 KB | Output is correct |
13 | Correct | 17 ms | 23852 KB | Output is correct |
14 | Correct | 17 ms | 23936 KB | Output is correct |
15 | Correct | 17 ms | 23936 KB | Output is correct |
16 | Correct | 17 ms | 23936 KB | Output is correct |
17 | Correct | 17 ms | 23808 KB | Output is correct |
18 | Correct | 17 ms | 23936 KB | Output is correct |
19 | Correct | 17 ms | 23808 KB | Output is correct |
20 | Correct | 17 ms | 23808 KB | Output is correct |
21 | Correct | 17 ms | 23936 KB | Output is correct |
22 | Correct | 18 ms | 23808 KB | Output is correct |
23 | Correct | 17 ms | 23808 KB | Output is correct |
24 | Correct | 17 ms | 23808 KB | Output is correct |
25 | Correct | 17 ms | 23808 KB | Output is correct |
26 | Correct | 18 ms | 23936 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 79 ms | 50296 KB | Output is correct |
2 | Correct | 80 ms | 50392 KB | Output is correct |
3 | Correct | 79 ms | 50296 KB | Output is correct |
4 | Correct | 86 ms | 50936 KB | Output is correct |
5 | Correct | 40 ms | 48760 KB | Output is correct |
6 | Correct | 40 ms | 48760 KB | Output is correct |
7 | Correct | 41 ms | 48760 KB | Output is correct |
8 | Correct | 40 ms | 48824 KB | Output is correct |
9 | Correct | 42 ms | 49136 KB | Output is correct |
10 | Correct | 40 ms | 48752 KB | Output is correct |
11 | Correct | 40 ms | 48880 KB | Output is correct |
12 | Correct | 41 ms | 48880 KB | Output is correct |
13 | Correct | 51 ms | 49008 KB | Output is correct |
14 | Correct | 57 ms | 49648 KB | Output is correct |
15 | Correct | 73 ms | 50296 KB | Output is correct |
16 | Correct | 75 ms | 50168 KB | Output is correct |
17 | Correct | 43 ms | 49400 KB | Output is correct |
18 | Correct | 43 ms | 49272 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 90 ms | 51160 KB | Output is correct |
2 | Correct | 88 ms | 51064 KB | Output is correct |
3 | Correct | 202 ms | 54520 KB | Output is correct |
4 | Correct | 79 ms | 50936 KB | Output is correct |
5 | Correct | 194 ms | 49656 KB | Output is correct |
6 | Correct | 180 ms | 49656 KB | Output is correct |
7 | Correct | 48 ms | 49528 KB | Output is correct |
8 | Correct | 138 ms | 49568 KB | Output is correct |
9 | Correct | 42 ms | 49136 KB | Output is correct |
10 | Correct | 45 ms | 49264 KB | Output is correct |
11 | Correct | 47 ms | 49392 KB | Output is correct |
12 | Correct | 84 ms | 49648 KB | Output is correct |
13 | Correct | 170 ms | 49960 KB | Output is correct |
14 | Correct | 228 ms | 52816 KB | Output is correct |
15 | Correct | 146 ms | 51064 KB | Output is correct |
16 | Correct | 136 ms | 51064 KB | Output is correct |
17 | Correct | 116 ms | 50168 KB | Output is correct |
18 | Correct | 95 ms | 50036 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 548 ms | 168776 KB | Output is correct |
2 | Correct | 538 ms | 168824 KB | Output is correct |
3 | Correct | 879 ms | 174608 KB | Output is correct |
4 | Correct | 537 ms | 168824 KB | Output is correct |
5 | Correct | 519 ms | 162680 KB | Output is correct |
6 | Correct | 475 ms | 162476 KB | Output is correct |
7 | Correct | 161 ms | 162680 KB | Output is correct |
8 | Correct | 413 ms | 162552 KB | Output is correct |
9 | Correct | 144 ms | 161768 KB | Output is correct |
10 | Correct | 146 ms | 160744 KB | Output is correct |
11 | Correct | 175 ms | 161416 KB | Output is correct |
12 | Correct | 281 ms | 162024 KB | Output is correct |
13 | Correct | 740 ms | 162632 KB | Output is correct |
14 | Correct | 932 ms | 170556 KB | Output is correct |
15 | Correct | 545 ms | 167412 KB | Output is correct |
16 | Correct | 561 ms | 167496 KB | Output is correct |
17 | Correct | 316 ms | 162400 KB | Output is correct |
18 | Correct | 301 ms | 162468 KB | Output is correct |