Submission #1094076

# Submission time Handle Problem Language Result Execution time Memory
1094076 2024-09-28T11:43:09 Z alexander707070 Global Warming (CEOI18_glo) C++14
45 / 100
2000 ms 180308 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;
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];
	}

	if(n<=1000){
		vector<int> w={0};

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

				if(a[i]-a[f]-1>=-x and a[i]-a[f]-1<=x){
					w.push_back(a[i]-a[f]-1);
				}
			}
		}

		sort(w.begin(),w.end());
	
		for(int i=0;i<w.size();i+=max(1,int(w.size())/1000)){
			sol[i]=solve(w[i]);
			if(sol[i]>ans){
				ans=sol[i]; pos=i;
			}
		}

		for(int i=max(0,pos-1000);i<=min(int(w.size())-1,pos+1000);i++){
			ans=max(ans,solve(w[i]));
		}

		cout<<ans<<"\n";
		return 0;
	}

	long long l=-x,r=x,lt,rt;
	while(l+20<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;
		}
	}

	for(int d=l;d<=r;d++){
		ans=max(ans,solve(d));
	}

	cout<<ans<<"\n";

    return 0;
}

Compilation message

glo.cpp: In function 'int main()':
glo.cpp:115:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  115 |   for(int i=0;i<w.size();i+=max(1,int(w.size())/1000)){
      |               ~^~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 344 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 0 ms 348 KB Output is correct
9 Correct 1 ms 500 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 2 ms 460 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 344 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 0 ms 348 KB Output is correct
9 Correct 1 ms 500 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 2 ms 460 KB Output is correct
12 Correct 119 ms 520 KB Output is correct
13 Correct 21 ms 348 KB Output is correct
14 Correct 153 ms 348 KB Output is correct
15 Correct 98 ms 500 KB Output is correct
16 Correct 113 ms 348 KB Output is correct
17 Correct 2 ms 596 KB Output is correct
18 Correct 7 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 344 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 0 ms 348 KB Output is correct
9 Correct 1 ms 500 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 2 ms 460 KB Output is correct
12 Correct 119 ms 520 KB Output is correct
13 Correct 21 ms 348 KB Output is correct
14 Correct 153 ms 348 KB Output is correct
15 Correct 98 ms 500 KB Output is correct
16 Correct 113 ms 348 KB Output is correct
17 Correct 2 ms 596 KB Output is correct
18 Correct 7 ms 348 KB Output is correct
19 Execution timed out 2067 ms 2580 KB Time limit exceeded
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 511 ms 180288 KB Output is correct
2 Correct 508 ms 180308 KB Output is correct
3 Correct 498 ms 180304 KB Output is correct
4 Correct 521 ms 180192 KB Output is correct
5 Correct 268 ms 99152 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 947 ms 52320 KB Output is correct
2 Correct 897 ms 52472 KB Output is correct
3 Correct 902 ms 52416 KB Output is correct
4 Correct 609 ms 28496 KB Output is correct
5 Correct 4 ms 348 KB Output is correct
6 Correct 618 ms 5064 KB Output is correct
7 Correct 739 ms 36692 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 2057 ms 97408 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 344 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 0 ms 348 KB Output is correct
9 Correct 1 ms 500 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 2 ms 460 KB Output is correct
12 Correct 119 ms 520 KB Output is correct
13 Correct 21 ms 348 KB Output is correct
14 Correct 153 ms 348 KB Output is correct
15 Correct 98 ms 500 KB Output is correct
16 Correct 113 ms 348 KB Output is correct
17 Correct 2 ms 596 KB Output is correct
18 Correct 7 ms 348 KB Output is correct
19 Execution timed out 2067 ms 2580 KB Time limit exceeded
20 Halted 0 ms 0 KB -