# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
306480 | 2020-09-25T17:02:32 Z | Pajaraja | Teams (IOI15_teams) | C++17 | 943 ms | 170444 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 | 18 ms | 23936 KB | Output is correct |
4 | Correct | 17 ms | 23936 KB | Output is correct |
5 | Correct | 17 ms | 23968 KB | Output is correct |
6 | Correct | 17 ms | 23936 KB | Output is correct |
7 | Correct | 17 ms | 23936 KB | Output is correct |
8 | Correct | 17 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 | 17 ms | 23808 KB | Output is correct |
12 | Correct | 17 ms | 23936 KB | Output is correct |
13 | Correct | 18 ms | 23936 KB | Output is correct |
14 | Correct | 18 ms | 23936 KB | Output is correct |
15 | Correct | 17 ms | 23808 KB | Output is correct |
16 | Correct | 17 ms | 23936 KB | Output is correct |
17 | Correct | 18 ms | 23808 KB | Output is correct |
18 | Correct | 17 ms | 23808 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 | 23808 KB | Output is correct |
22 | Correct | 17 ms | 23808 KB | Output is correct |
23 | Correct | 18 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 | 23808 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 77 ms | 49144 KB | Output is correct |
2 | Correct | 80 ms | 49148 KB | Output is correct |
3 | Correct | 81 ms | 49144 KB | Output is correct |
4 | Correct | 83 ms | 49656 KB | Output is correct |
5 | Correct | 40 ms | 47992 KB | Output is correct |
6 | Correct | 41 ms | 48120 KB | Output is correct |
7 | Correct | 41 ms | 47992 KB | Output is correct |
8 | Correct | 39 ms | 47992 KB | Output is correct |
9 | Correct | 41 ms | 48240 KB | Output is correct |
10 | Correct | 40 ms | 48240 KB | Output is correct |
11 | Correct | 39 ms | 48240 KB | Output is correct |
12 | Correct | 41 ms | 48240 KB | Output is correct |
13 | Correct | 51 ms | 48112 KB | Output is correct |
14 | Correct | 55 ms | 48624 KB | Output is correct |
15 | Correct | 71 ms | 49040 KB | Output is correct |
16 | Correct | 71 ms | 49016 KB | Output is correct |
17 | Correct | 43 ms | 48248 KB | Output is correct |
18 | Correct | 42 ms | 48248 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 84 ms | 49528 KB | Output is correct |
2 | Correct | 98 ms | 49588 KB | Output is correct |
3 | Correct | 194 ms | 52472 KB | Output is correct |
4 | Correct | 83 ms | 49656 KB | Output is correct |
5 | Correct | 182 ms | 48504 KB | Output is correct |
6 | Correct | 167 ms | 48508 KB | Output is correct |
7 | Correct | 48 ms | 48376 KB | Output is correct |
8 | Correct | 137 ms | 48468 KB | Output is correct |
9 | Correct | 43 ms | 48376 KB | Output is correct |
10 | Correct | 42 ms | 48496 KB | Output is correct |
11 | Correct | 47 ms | 48496 KB | Output is correct |
12 | Correct | 85 ms | 48624 KB | Output is correct |
13 | Correct | 165 ms | 48568 KB | Output is correct |
14 | Correct | 217 ms | 50936 KB | Output is correct |
15 | Correct | 129 ms | 49548 KB | Output is correct |
16 | Correct | 131 ms | 49528 KB | Output is correct |
17 | Correct | 112 ms | 48632 KB | Output is correct |
18 | Correct | 93 ms | 48688 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 527 ms | 164420 KB | Output is correct |
2 | Correct | 572 ms | 164580 KB | Output is correct |
3 | Correct | 879 ms | 170444 KB | Output is correct |
4 | Correct | 540 ms | 164728 KB | Output is correct |
5 | Correct | 539 ms | 158456 KB | Output is correct |
6 | Correct | 490 ms | 158328 KB | Output is correct |
7 | Correct | 161 ms | 158456 KB | Output is correct |
8 | Correct | 418 ms | 158380 KB | Output is correct |
9 | Correct | 150 ms | 157544 KB | Output is correct |
10 | Correct | 143 ms | 157772 KB | Output is correct |
11 | Correct | 175 ms | 157800 KB | Output is correct |
12 | Correct | 281 ms | 157800 KB | Output is correct |
13 | Correct | 772 ms | 158536 KB | Output is correct |
14 | Correct | 943 ms | 166516 KB | Output is correct |
15 | Correct | 555 ms | 163188 KB | Output is correct |
16 | Correct | 566 ms | 163056 KB | Output is correct |
17 | Correct | 315 ms | 158304 KB | Output is correct |
18 | Correct | 299 ms | 158116 KB | Output is correct |