Submission #931763

# Submission time Handle Problem Language Result Execution time Memory
931763 2024-02-22T10:36:08 Z winter0101 Teams (IOI15_teams) C++14
34 / 100
1366 ms 414604 KB
#include<bits/stdc++.h>
using namespace std;
#define all(fl) fl.begin(),fl.end()
#define pb push_back
#define fi first
#define se second
#define for1(i,j,k) for(int i=j;i<=k;i++)
#define for2(i,j,k) for(int i=j;i>=k;i--)
#define for3(i,j,k,l) for(int i=j;i<=k;i+=l)
#define lb lower_bound
#define ub upper_bound
#define sz(a) (int)a.size()
#define pii pair<int,int>
#define pli pair<long long,int>
#define gcd __gcd
#define lcm(x,y) x*y/__gcd(x,y)
#define pil pair<int,long long>
struct node{
int l,r,val;
node(){
l=r=-1,val=0;
}
}st[30000009];
int nnode=0;
int build(int id,int l,int r){
if (l==r)return id;
int mid=(l+r)>>1;
st[id].l=build(id<<1,l,mid);
st[id].r=build(id<<1|1,mid+1,r);
return id;
}
int copy(int id){
st[++nnode]=st[id];
return nnode;
}
int update(int id,int l,int r,int u,int val){
if (l>u||r<u)return id;
if (l==r){
int newnode=copy(id);
st[newnode].val+=val;
return newnode;
}
int mid=(l+r)>>1;
int newnode=copy(id);
st[newnode].l=update(st[id].l,l,mid,u,val);
st[newnode].r=update(st[id].r,mid+1,r,u,val);
st[newnode].val=st[st[newnode].l].val+st[st[newnode].r].val;
return newnode;
}
int update_range(int id1,int id2,int l,int r,int u,int v){
if (l>v||r<u||u>v)return id1;
if (u<=l&&r<=v)return id2;
int mid=(l+r)>>1;
int newnode=copy(id1);
st[newnode].l=update_range(st[id1].l,st[id2].l,l,mid,u,v);
st[newnode].r=update_range(st[id1].r,st[id2].r,mid+1,r,u,v);
st[newnode].val=st[st[newnode].l].val+st[st[newnode].r].val;
return newnode;
}
int get(int id,int l,int r,int u,int v){
if (l>v||r<u||u>v)return 0;
if (u<=l&&r<=v)return st[id].val;
int mid=(l+r)>>1;
return get(st[id].l,l,mid,u,v)+get(st[id].r,mid+1,r,u,v);
}
int walk(int id1,int id2,int l,int r,int val,int need){
if (st[id1].val-st[id2].val+val<need)return -1;
if (l==r)return l;
int mid=(l+r)>>1;
int cost=st[st[id1].l].val-st[st[id2].l].val;
if (cost+val>=need)return walk(st[id1].l,st[id2].l,l,mid,val,need);
return walk(st[id1].r,st[id2].r,mid+1,r,val,need-cost);
}
const int maxn=5e5+9;
pii a[maxn];
int req[maxn];
int root[maxn];
vector<int>add[maxn],del[maxn];
int n;
void init(int N, int A[], int B[]) {
n=N;
for1(i,1,n){
a[i].fi=A[i-1],a[i].se=B[i-1];
}
sort(a+1,a+1+n,[](pii p,pii q){
if (p.se==q.se)return p.fi<q.fi;
return p.se<q.se;
});
for1(i,1,n){
add[a[i].fi].pb(i);
del[a[i].se+1].pb(i);
int l=1,r=n;
req[i]=n+1;
while (l<=r){
int mid=(l+r)/2;
if (a[mid].se>=i){
req[i]=mid;
r=mid-1;
}
else l=mid+1;
}
}
root[0]=build(1,1,n);
nnode=4*n;
for1(i,1,n){
int rt=root[i-1];
for(auto v:add[i]){
rt=update(rt,1,n,v,1);
}
for (auto v:del[i]){
rt=update(rt,1,n,v,-1);
}
root[i]=rt;
}
}
int cnt[maxn];
int can(int M, int K[]) {
int now=root[0],num=nnode;
long long sum=0;
for1(i,0,M-1)sum+=K[i];
if (sum>n)return 0;
for1(i,0,M-1)cnt[K[i]]++;
vector<int>gr;
for1(i,0,M-1)gr.pb(K[i]);
sort(all(gr));
gr.resize(distance(gr.begin(),unique(all(gr))));
bool fl=true;
for (auto v:gr){
int ans=walk(root[v],now,1,n,-get(root[v],1,n,1,req[v]-1)+get(now,1,n,1,req[v]-1),cnt[v]*v);
//cout<<v<<" "<<ans<<'\n';
if (ans==-1){
fl=false;
break;
}
now=update_range(now,root[v],1,n,req[v],ans);
}
nnode=num;
for1(i,0,M-1)cnt[K[i]]=0;
return fl;
}
# Verdict Execution time Memory Grader output
1 Correct 119 ms 376404 KB Output is correct
2 Correct 113 ms 376404 KB Output is correct
3 Correct 114 ms 376400 KB Output is correct
4 Correct 114 ms 376404 KB Output is correct
5 Correct 111 ms 376244 KB Output is correct
6 Correct 113 ms 376268 KB Output is correct
7 Correct 112 ms 376404 KB Output is correct
8 Correct 113 ms 376404 KB Output is correct
9 Correct 112 ms 376404 KB Output is correct
10 Correct 111 ms 376320 KB Output is correct
11 Correct 112 ms 376404 KB Output is correct
12 Correct 111 ms 376400 KB Output is correct
13 Correct 113 ms 376420 KB Output is correct
14 Correct 111 ms 376220 KB Output is correct
15 Correct 114 ms 376216 KB Output is correct
16 Correct 110 ms 376328 KB Output is correct
17 Correct 111 ms 376400 KB Output is correct
18 Correct 112 ms 376220 KB Output is correct
19 Correct 110 ms 376400 KB Output is correct
20 Correct 115 ms 376400 KB Output is correct
21 Correct 116 ms 376404 KB Output is correct
22 Correct 114 ms 376352 KB Output is correct
23 Correct 112 ms 376400 KB Output is correct
24 Correct 112 ms 376348 KB Output is correct
25 Correct 111 ms 376400 KB Output is correct
26 Correct 112 ms 376400 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 216 ms 382396 KB Output is correct
2 Correct 192 ms 382292 KB Output is correct
3 Correct 195 ms 382256 KB Output is correct
4 Correct 204 ms 383360 KB Output is correct
5 Correct 157 ms 379732 KB Output is correct
6 Correct 155 ms 379728 KB Output is correct
7 Correct 162 ms 379728 KB Output is correct
8 Correct 156 ms 379888 KB Output is correct
9 Correct 137 ms 379872 KB Output is correct
10 Correct 168 ms 379844 KB Output is correct
11 Correct 156 ms 379588 KB Output is correct
12 Correct 159 ms 379532 KB Output is correct
13 Correct 164 ms 379976 KB Output is correct
14 Correct 159 ms 380988 KB Output is correct
15 Correct 190 ms 382020 KB Output is correct
16 Correct 188 ms 382036 KB Output is correct
17 Correct 162 ms 379984 KB Output is correct
18 Correct 160 ms 379620 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 200 ms 382608 KB Output is correct
2 Correct 221 ms 382912 KB Output is correct
3 Correct 328 ms 385876 KB Output is correct
4 Correct 198 ms 383260 KB Output is correct
5 Correct 195 ms 380240 KB Output is correct
6 Correct 208 ms 380164 KB Output is correct
7 Correct 160 ms 380312 KB Output is correct
8 Correct 186 ms 380212 KB Output is correct
9 Correct 136 ms 380016 KB Output is correct
10 Correct 161 ms 380108 KB Output is correct
11 Correct 169 ms 379924 KB Output is correct
12 Correct 232 ms 380028 KB Output is correct
13 Correct 273 ms 380336 KB Output is correct
14 Correct 348 ms 384052 KB Output is correct
15 Correct 225 ms 382560 KB Output is correct
16 Correct 224 ms 382516 KB Output is correct
17 Correct 186 ms 380176 KB Output is correct
18 Incorrect 185 ms 380108 KB Output isn't correct
19 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 802 ms 406532 KB Output is correct
2 Correct 797 ms 406672 KB Output is correct
3 Correct 1304 ms 414604 KB Output is correct
4 Correct 773 ms 407764 KB Output is correct
5 Correct 437 ms 393940 KB Output is correct
6 Correct 429 ms 394320 KB Output is correct
7 Correct 359 ms 393968 KB Output is correct
8 Correct 420 ms 393840 KB Output is correct
9 Correct 258 ms 394160 KB Output is correct
10 Correct 365 ms 392628 KB Output is correct
11 Correct 441 ms 392632 KB Output is correct
12 Correct 658 ms 392616 KB Output is correct
13 Correct 896 ms 395176 KB Output is correct
14 Correct 1366 ms 409060 KB Output is correct
15 Correct 745 ms 410632 KB Output is correct
16 Correct 715 ms 410828 KB Output is correct
17 Correct 449 ms 400460 KB Output is correct
18 Incorrect 438 ms 400320 KB Output isn't correct
19 Halted 0 ms 0 KB -