Submission #1094086

# Submission time Handle Problem Language Result Execution time Memory
1094086 2024-09-28T11:54:30 Z alexander707070 Global Warming (CEOI18_glo) C++14
15 / 100
2000 ms 262144 KB
#include<bits/stdc++.h>
#define MAXN 200007
using namespace std;

const int inf=1e9;

struct ST{
	struct node{
		int l,r,val;
	};

	node tree[30*MAXN];
	int num;
	
	void init(){
		num=1;
		tree[num]={0,0,0};
	}

	void addnode(){
		num++;
		tree[num]={0,0,0};
	}

	void check(int v){
		if(tree[v].l==0){
			addnode(); tree[v].l=num;
		}

		if(tree[v].r==0){
			addnode(); tree[v].r=num;
		}
	}

	void update(int v,long long l,long long r,int pos,int val){
		if(l==r){
			tree[v].val=max(tree[v].val,val);
		}else{
			long long tt=(l+r)/2;
			check(v);

			if(pos<=tt)update(tree[v].l,l,tt,pos,val);
			else update(tree[v].r,tt+1,r,pos,val);

			tree[v].val=max(tree[tree[v].l].val,tree[tree[v].r].val);
		}
	}

	int getmax(int v,long long l,long long r,long long ll,long long rr){
		if(ll>rr or v==0)return 0;
		if(l==ll and r==rr){
			return tree[v].val;
		}else{
			long long tt=(l+r)/2;
			return max( getmax(tree[v].l,l,tt,ll,min(tt,rr)) , getmax(tree[v].r,tt+1,r,max(tt+1,ll),rr) );
		}
	}
}seg[3];

int n,a[MAXN],ans,x,b[MAXN];
int dp[MAXN][3];

int solve(int d){
	seg[0].init();
	seg[1].init();
	seg[2].init();

	int res=0;

	for(int i=1;i<=n;i++){
		dp[i][0]=seg[0].getmax(1,0,2*inf,0,a[i]-1)+1;
		dp[i][1]=max(seg[1].getmax(1,0,2*inf,0,a[i]-1)+1 , seg[0].getmax(1,0,2*inf,0,a[i]+d-1)+1);
		dp[i][2]=max(seg[2].getmax(1,0,2*inf,0,a[i]-1)+1 , seg[1].getmax(1,0,2*inf,0,a[i]-d-1)+1);

		seg[0].update(1,0,2*inf,a[i],dp[i][0]);
		seg[1].update(1,0,2*inf,a[i],dp[i][1]);
		seg[2].update(1,0,2*inf,a[i],dp[i][2]);

		res=max(res,max(dp[i][0],max(dp[i][1],dp[i][2])));
	}

	return res;
}

int sol[2000007],pos;

int main(){

	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	cin>>n>>x;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[i]=a[i];
	}

	long long l=-x,r=x,lt,rt;
	while(l+2<r){
		lt=l+(r-l+1)/3;
		rt=r-(r-l+1)/3;
 
		int ls=solve(lt);
		int rs=solve(rt);
 
		if(ls>rs)l=lt;
		else if(rs>ls)r=rt;
		else break;
	}
	
	sort(b+1,b+n+1);
	vector<int> w={0};

	for(int i=1;i<=n;i++){
		for(int f=i+1;f<=n;f++){
			if(b[i]-b[f]+1>=-x and b[i]-b[f]+1<=x){
				w.push_back(b[i]-b[f]+1);
			}else break;
		}

		for(int f=i-1;f>=1;f--){
			if(b[i]-b[f]+1>=-x and b[i]-b[f]+1<=x){
				w.push_back(b[i]-b[f]+1);
			}else break;
		}

		for(int f=i+1;f<=n;f++){
			if(b[i]-b[f]-1>=-x and b[i]-b[f]-1<=x){
				w.push_back(b[i]-b[f]-1);
			}else break;
		}

		for(int f=i-1;f>=1;f--){
			if(b[i]-b[f]-1>=-x and b[i]-b[f]-1<=x){
				w.push_back(b[i]-b[f]-1);
			}else break;
		}
	}

	for(int d:w){
		ans=max(ans,solve(d));
	}

	cout<<ans<<"\n";

    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 600 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 2 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 600 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 2 ms 348 KB Output is correct
12 Correct 258 ms 348 KB Output is correct
13 Correct 5 ms 348 KB Output is correct
14 Correct 200 ms 512 KB Output is correct
15 Correct 117 ms 348 KB Output is correct
16 Correct 132 ms 344 KB Output is correct
17 Correct 2 ms 348 KB Output is correct
18 Correct 6 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 600 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 2 ms 348 KB Output is correct
12 Correct 258 ms 348 KB Output is correct
13 Correct 5 ms 348 KB Output is correct
14 Correct 200 ms 512 KB Output is correct
15 Correct 117 ms 348 KB Output is correct
16 Correct 132 ms 344 KB Output is correct
17 Correct 2 ms 348 KB Output is correct
18 Correct 6 ms 348 KB Output is correct
19 Execution timed out 2066 ms 2528 KB Time limit exceeded
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2069 ms 178928 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2048 ms 52020 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 572 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 600 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 2 ms 348 KB Output is correct
12 Correct 258 ms 348 KB Output is correct
13 Correct 5 ms 348 KB Output is correct
14 Correct 200 ms 512 KB Output is correct
15 Correct 117 ms 348 KB Output is correct
16 Correct 132 ms 344 KB Output is correct
17 Correct 2 ms 348 KB Output is correct
18 Correct 6 ms 348 KB Output is correct
19 Execution timed out 2066 ms 2528 KB Time limit exceeded
20 Halted 0 ms 0 KB -