Submission #1007457

#TimeUsernameProblemLanguageResultExecution timeMemory
1007457bachhoangxuanTeams (IOI15_teams)C++17
0 / 100
318 ms167960 KiB
#include "teams.h" #include<bits/stdc++.h> using namespace std; const int maxn = 5e5+5; const int maxl = 25; int n,lt[maxn],rt[maxn]; int tree[maxn*maxl],lc[maxn*maxl],rc[maxn*maxl],T=1; void build(int l,int r,int id){ if(l==r) return; lc[id]=++T;rc[id]=++T; int mid=(l+r)>>1; build(l,mid,lc[id]);build(mid+1,r,rc[id]); } int update(int l,int r,int id,int p){ if(l==r){ tree[++T]=tree[id]+1; return T; } int mid=(l+r)>>1; int cc=++T; lc[cc]=lc[id];rc[cc]=rc[id]; if(p<=mid) lc[cc]=update(l,mid,lc[id],p); else rc[cc]=update(mid+1,r,rc[id],p); tree[cc]=tree[lc[cc]]+tree[rc[cc]]; return cc; } int query(int l,int r,int id,int p){ if(l==r) return tree[id]; int mid=(l+r)>>1; if(p<=mid) return query(l,mid,lc[id],p)+tree[rc[id]]; else return query(mid+1,r,rc[id],p); } vector<int> e[maxn]; int root[maxn]; void init(int N, int A[], int B[]) { for(int i=0;i<N;i++){ lt[B[i]]++; rt[A[i]]++; e[B[i]].push_back(A[i]); } for(int i=1;i<=N;i++) lt[i]+=lt[i-1]; for(int i=N;i>=1;i--) rt[i]+=rt[i+1]; n=N; root[0]=1; build(1,n,1); for(int i=1;i<=N;i++){ root[i]=root[i-1]; for(int l:e[i]) root[i]=update(1,n,root[i],l); } } int get(int l,int r){ if(l>r) return 0; return query(1,n,root[r],l); } int can(int M, int K[]) { vector<int> com; for(int i=0;i<M;i++) com.push_back(K[i]); sort(com.begin(),com.end()); com.erase(unique(com.begin(),com.end()),com.end()); int sz=(int)com.size(); vector<int> cnt(sz),d(sz); for(int i=1;i<sz;i++) d[i]=get(com[i-1]+1,com[i]-1)+d[i-1]; for(int i=0;i<M;i++) cnt[lower_bound(com.begin(),com.end(),K[i])-com.begin()]++; for(int i=0;i<sz;i++){ if(cnt[i]>n/com[i]) return 0; cnt[i]*=com[i]; if(i) cnt[i]+=cnt[i-1]; if(cnt[i]>n) return 0; } for(int i=0;i<sz;i++) for(int j=i;j<sz;j++){ int num=n-(lt[com[i]-1]+rt[com[j]+1])-(d[j]-d[i]); int val=(i?cnt[j]-cnt[i-1]:cnt[j]); if(num<val) return 0; } 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...