Submission #123507

# Submission time Handle Problem Language Result Execution time Memory
123507 2019-07-01T14:10:56 Z nxteru Dancing Elephants (IOI11_elephants) C++14
97 / 100
9000 ms 9308 KB
#include "elephants.h"
#include <bits/stdc++.h>
#pragma gcc target "avx2"
#pragma gcc optimize "O3"
#pragma gcc optimize "unroll-roops"
using namespace std;
#define MAX_N 150005
#define B 350
int n,k,bs[MAX_N/B+2],p[MAX_N],pl[MAX_N],l,cnt,ds[MAX_N/B+2][B*3+1],sz[MAX_N/B+2][B*3+1],el[MAX_N/B+2][B*3+1];
void Bini(int x,int *xel,int xbs,int *xds,int *xsz){
	sort(xel,xel+xbs);
	int r=xbs;
	for(int i=xbs-1;i>=0;i--){
		while(r-1>=0&&xel[i]+l<xel[r-1])r--;
		if(r==xbs){
			xds[i]=xel[i]+l;
			xsz[i]=1;
		}else{
			xds[i]=xds[r];
			xsz[i]=xsz[r]+1;
		}
	}
}
void ALLini(void){
	for(int i=0;i<n;i++)pl[i]=p[i];
	sort(pl,pl+n);
	bs[0]=0;
	k=0;
	for(int i=0;i<n;i++){
		if(bs[k]>=B){
			k++;
			bs[k]=0;
		}
		el[k][bs[k]]=pl[i];
		bs[k]++;
	}
	for(int i=0;i<=k;i++)Bini(i,el[i],bs[i],ds[i],sz[i]);
}
void init(int N, int L, int X[]){
	n=N,l=L;
	for(int i=0;i<n;i++)p[i]=X[i];
	ALLini();
}
int update(int t, int y){
	int a=-1,b=p[t];
	while(a+1<=k&&bs[a+1]==0||(bs[a+1]>=1&&el[a+1][0]<=b))a++;
	if(a==-1)a=0;
	for(int i=0;i<bs[a]-1;i++){
		if(el[a][i]==b){
			el[a][i]=el[a][bs[a]-1];
			break;
		}
	}
	bs[a]--;
	Bini(a,el[a],bs[a],ds[a],sz[a]);
	p[t]=y;
	a=-1;
	while(a+1<=k&&bs[a+1]==0||(bs[a+1]>=1&&el[a+1][0]<=y))a++;
	if(a==-1)a=0;
	el[a][bs[a]]=y;
	bs[a]++;
	Bini(a,el[a],bs[a],ds[a],sz[a]);
	int ans=0;
	a=0,b=-1;
	for(;a<=k;a++){
		if(bs[a]==0)continue;
		int c=upper_bound(el[a],el[a]+bs[a],b)-el[a];
		if(c==bs[a])continue;
		ans+=sz[a][c];
		b=ds[a][c];
	}
	cnt++;
	if(cnt>=B/3*2){
		cnt=0;
		ALLini();
	}
	return ans;
}

Compilation message

elephants.cpp:3:0: warning: ignoring #pragma gcc target [-Wunknown-pragmas]
 #pragma gcc target "avx2"
 
elephants.cpp:4:0: warning: ignoring #pragma gcc optimize [-Wunknown-pragmas]
 #pragma gcc optimize "O3"
 
elephants.cpp:5:0: warning: ignoring #pragma gcc optimize [-Wunknown-pragmas]
 #pragma gcc optimize "unroll-roops"
 
elephants.cpp: In function 'int update(int, int)':
elephants.cpp:46:14: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
  while(a+1<=k&&bs[a+1]==0||(bs[a+1]>=1&&el[a+1][0]<=b))a++;
        ~~~~~~^~~~~~~~~~~~
elephants.cpp:58:14: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
  while(a+1<=k&&bs[a+1]==0||(bs[a+1]>=1&&el[a+1][0]<=y))a++;
        ~~~~~~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 380 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 380 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 380 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 816 ms 1912 KB Output is correct
8 Correct 864 ms 2040 KB Output is correct
9 Correct 1234 ms 3704 KB Output is correct
10 Correct 1184 ms 3392 KB Output is correct
11 Correct 1131 ms 3356 KB Output is correct
12 Correct 1941 ms 3356 KB Output is correct
13 Correct 1089 ms 3356 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 380 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 816 ms 1912 KB Output is correct
8 Correct 864 ms 2040 KB Output is correct
9 Correct 1234 ms 3704 KB Output is correct
10 Correct 1184 ms 3392 KB Output is correct
11 Correct 1131 ms 3356 KB Output is correct
12 Correct 1941 ms 3356 KB Output is correct
13 Correct 1089 ms 3356 KB Output is correct
14 Correct 1243 ms 2072 KB Output is correct
15 Correct 1316 ms 2332 KB Output is correct
16 Correct 2898 ms 3596 KB Output is correct
17 Correct 3350 ms 4528 KB Output is correct
18 Correct 3501 ms 4524 KB Output is correct
19 Correct 3236 ms 4528 KB Output is correct
20 Correct 3316 ms 4600 KB Output is correct
21 Correct 3323 ms 4600 KB Output is correct
22 Correct 1966 ms 4604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 380 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 816 ms 1912 KB Output is correct
8 Correct 864 ms 2040 KB Output is correct
9 Correct 1234 ms 3704 KB Output is correct
10 Correct 1184 ms 3392 KB Output is correct
11 Correct 1131 ms 3356 KB Output is correct
12 Correct 1941 ms 3356 KB Output is correct
13 Correct 1089 ms 3356 KB Output is correct
14 Correct 1243 ms 2072 KB Output is correct
15 Correct 1316 ms 2332 KB Output is correct
16 Correct 2898 ms 3596 KB Output is correct
17 Correct 3350 ms 4528 KB Output is correct
18 Correct 3501 ms 4524 KB Output is correct
19 Correct 3236 ms 4528 KB Output is correct
20 Correct 3316 ms 4600 KB Output is correct
21 Correct 3323 ms 4600 KB Output is correct
22 Correct 1966 ms 4604 KB Output is correct
23 Correct 7226 ms 9308 KB Output is correct
24 Correct 7954 ms 9220 KB Output is correct
25 Correct 6274 ms 9224 KB Output is correct
26 Correct 7920 ms 9252 KB Output is correct
27 Execution timed out 9104 ms 9208 KB Time limit exceeded
28 Halted 0 ms 0 KB -