답안 #428510

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
428510 2021-06-15T12:26:17 Z kshitij_sodani Shortcut (IOI16_shortcut) C++14
0 / 100
1 ms 332 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define a first
#define b second
#define pb push_back


#include "shortcut.h"
llo pre[1000001];
int n;
llo it[1000001];
llo ind[1000001];
llo ind2[1000001];
llo ind3[1000001];
llo ind4[1000001];
llo ind5[1000001];
llo tree[4*1000001][4];

llo ss;
llo ma[2][2];
vector<pair<llo,llo>> tt;
void update(int no,int l,int r,int i,int val,int ee){
	if(l==r){
		tree[no][ee]=val;
	}
	else{
		int mid=(l+r)/2;
		if(i<=mid){
			update(no*2+1,l,mid,i,val,ee);
		}
		else{
			update(no*2+2,mid+1,r,i,val,ee);
		}
		tree[no][ee]=max(tree[no*2+1][ee],tree[no*2+2][ee]);
	}
}
llo query(int no,int l,int r,int aa,int bb,int ee){
	if(r<aa or l>bb){
		return -(llo)1e18;
	}
	if(aa<=l and r<=bb){
		return tree[no][ee];
	}
	int mid=(l+r)/2;
	return max(query(no*2+1,l,mid,aa,bb,ee),query(no*2+2,mid+1,r,aa,bb,ee));
}
bool check(llo mid){

	llo ma=-1e18;
	llo ma2=-1e18;
	llo ma3=-1e18;
	llo ma4=-1e18;
	//llo st=1;
	for(int i=0;i<4*n;i++){
		for(int j=0;j<2;j++){
			tree[i][j]=-1e18;
		}
	}
	for(int j=0;j<n;j++){
		llo xx=-1;
		for(int k=19;k>=0;k--){
			if(xx+(1<<k)<n){
				if(tt[xx+(1<<k)].a+pre[j]+it[j]>mid){
					xx+=(1<<k);
				}
			}
		}
		if(xx>=0){
			llo yy=query(0,0,n-1,0,xx,0);
			llo zz=query(0,0,n-1,0,xx,1);
			ma=max(ma,yy+pre[j]+it[j]);
			ma2=max(ma2,yy-pre[j]+it[j]);
			ma3=max(ma3,zz-pre[j]+it[j]);
			ma4=max(ma4,zz+pre[j]+it[j]);
			//st=0;
		}


		update(0,0,n-1,ind5[j],pre[j]+it[j],0);
		update(0,0,n-1,ind5[j],-pre[j]+it[j],1);
	}

	/*for(int i=0;i<n;i++){
		for(int j=i+1;j<n;j++){
			
			if(pre[j]-pre[i]+it[i]+it[j]>mid){
				st=0;
				ma=max(ma,pre[i]+pre[j]+it[i]+it[j]);
				ma2=max(ma2,pre[i]-pre[j]+it[i]+it[j]);
				ma3=max(ma3,-pre[i]-pre[j]+it[i]+it[j]);
				ma4=max(ma4,-pre[i]+pre[j]+it[i]+it[j]);
			}
		}
	}*/
	/*if(st==1){
		return true;
	}*/
	//return false;
	ma=mid-ma-ss;
	ma=-ma;
	ma2=mid-ma2-ss;
	ma2=-ma2;
	ma3=mid-ma3-ss;
	ma4=mid-ma4-ss;
	//-pre[i]-pre[j]<=ma
	//pre[i]+pre[j]>=ma
	//pre[i]+pre[j]<=ma3

	//-pre[i]+pre[j]<=ma2
	//pre[i]-pre[j]>=ma2
	//pre[i]-pre[j]<=ma4

/*	llo ind=0;
	llo ind3=0;
	llo ind2=0;
	llo ind4=0;*/
	if(pre[n-1]+pre[n-2]<ma){
		return false;
	}
	if(ma>ma3 or ma2>ma4){
		return false;
	}
	llo cur=0;
	for(int i=n-1;i>=0;i--){
		while(cur<i){
			if(pre[cur]+pre[i]<ma){
				cur++;
			}
			else{
				break;
			}
		}
		ind[i]=cur;
	}
	cur=0;
	for(int i=n-1;i>=0;i--){
		//cur=0;
		while(cur<i){
			if(pre[cur+1]+pre[i]<=ma3){
				cur++;
			}
			else{
				break;
			}
		}
		ind3[i]=cur;
	}
	cur=0;
	for(int i=0;i<n;i++){
		while(cur<i){
			if(pre[cur]-pre[i]<ma2){
				cur++;
			}
			else{
				break;
			}
		}
		ind2[i]=cur;
	}
	cur=0;
	for(int i=0;i<n;i++){
		while(cur<i){
			if(pre[cur+1]-pre[i]<=ma4){
				cur++;
			}
			else{
				break;
			}
		}
		ind4[i]=cur;
	}

	for(llo i=1;i<n;i++){
		
		if(max(ind[i],ind2[i])<=min(i-1,min(ind3[i],ind4[i]))){
			return true;
		}
	
	}
	

	//ma to ma3 range





	return false;



}
long long find_shortcut(int nn, std::vector<int> l, std::vector<int> d, int c)
{
	n=nn;
	pre[0]=0;
	ss=c;
	for(int i=1;i<n;i++){
		pre[i]=pre[i-1]+l[i-1];
	}


	for(int i=0;i<n;i++){
		it[i]=d[i];
	}
	for(int i=0;i<n;i++){
		tt.pb({-pre[i]+it[i],i});	
	}
	sort(tt.begin(),tt.end());
	reverse(tt.begin(),tt.end());
	for(int i=0;i<n;i++){
		ind5[tt[i].b]=i;
	}



	llo low=-1;
	for(int i=52;i>=0;i--){
		if(check(low+(1LL<<i))==false){
			low+=(1LL<<i);
		}
	}



    return low+1;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB n = 4, 80 is a correct answer
2 Correct 1 ms 332 KB n = 9, 110 is a correct answer
3 Correct 1 ms 332 KB n = 4, 21 is a correct answer
4 Correct 1 ms 332 KB n = 3, 4 is a correct answer
5 Correct 1 ms 332 KB n = 2, 62 is a correct answer
6 Correct 1 ms 300 KB n = 2, 3 is a correct answer
7 Correct 1 ms 296 KB n = 3, 29 is a correct answer
8 Correct 1 ms 332 KB n = 2, 3 is a correct answer
9 Correct 1 ms 300 KB n = 2, 3 is a correct answer
10 Correct 1 ms 332 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 332 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 332 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 296 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 300 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 332 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 332 KB n = 10, 3189 is a correct answer
19 Incorrect 1 ms 332 KB n = 10, incorrect answer: jury 7000000000 vs contestant 6000000000
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB n = 4, 80 is a correct answer
2 Correct 1 ms 332 KB n = 9, 110 is a correct answer
3 Correct 1 ms 332 KB n = 4, 21 is a correct answer
4 Correct 1 ms 332 KB n = 3, 4 is a correct answer
5 Correct 1 ms 332 KB n = 2, 62 is a correct answer
6 Correct 1 ms 300 KB n = 2, 3 is a correct answer
7 Correct 1 ms 296 KB n = 3, 29 is a correct answer
8 Correct 1 ms 332 KB n = 2, 3 is a correct answer
9 Correct 1 ms 300 KB n = 2, 3 is a correct answer
10 Correct 1 ms 332 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 332 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 332 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 296 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 300 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 332 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 332 KB n = 10, 3189 is a correct answer
19 Incorrect 1 ms 332 KB n = 10, incorrect answer: jury 7000000000 vs contestant 6000000000
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB n = 4, 80 is a correct answer
2 Correct 1 ms 332 KB n = 9, 110 is a correct answer
3 Correct 1 ms 332 KB n = 4, 21 is a correct answer
4 Correct 1 ms 332 KB n = 3, 4 is a correct answer
5 Correct 1 ms 332 KB n = 2, 62 is a correct answer
6 Correct 1 ms 300 KB n = 2, 3 is a correct answer
7 Correct 1 ms 296 KB n = 3, 29 is a correct answer
8 Correct 1 ms 332 KB n = 2, 3 is a correct answer
9 Correct 1 ms 300 KB n = 2, 3 is a correct answer
10 Correct 1 ms 332 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 332 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 332 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 296 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 300 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 332 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 332 KB n = 10, 3189 is a correct answer
19 Incorrect 1 ms 332 KB n = 10, incorrect answer: jury 7000000000 vs contestant 6000000000
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB n = 4, 80 is a correct answer
2 Correct 1 ms 332 KB n = 9, 110 is a correct answer
3 Correct 1 ms 332 KB n = 4, 21 is a correct answer
4 Correct 1 ms 332 KB n = 3, 4 is a correct answer
5 Correct 1 ms 332 KB n = 2, 62 is a correct answer
6 Correct 1 ms 300 KB n = 2, 3 is a correct answer
7 Correct 1 ms 296 KB n = 3, 29 is a correct answer
8 Correct 1 ms 332 KB n = 2, 3 is a correct answer
9 Correct 1 ms 300 KB n = 2, 3 is a correct answer
10 Correct 1 ms 332 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 332 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 332 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 296 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 300 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 332 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 332 KB n = 10, 3189 is a correct answer
19 Incorrect 1 ms 332 KB n = 10, incorrect answer: jury 7000000000 vs contestant 6000000000
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB n = 4, 80 is a correct answer
2 Correct 1 ms 332 KB n = 9, 110 is a correct answer
3 Correct 1 ms 332 KB n = 4, 21 is a correct answer
4 Correct 1 ms 332 KB n = 3, 4 is a correct answer
5 Correct 1 ms 332 KB n = 2, 62 is a correct answer
6 Correct 1 ms 300 KB n = 2, 3 is a correct answer
7 Correct 1 ms 296 KB n = 3, 29 is a correct answer
8 Correct 1 ms 332 KB n = 2, 3 is a correct answer
9 Correct 1 ms 300 KB n = 2, 3 is a correct answer
10 Correct 1 ms 332 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 332 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 332 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 296 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 300 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 332 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 332 KB n = 10, 3189 is a correct answer
19 Incorrect 1 ms 332 KB n = 10, incorrect answer: jury 7000000000 vs contestant 6000000000
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB n = 4, 80 is a correct answer
2 Correct 1 ms 332 KB n = 9, 110 is a correct answer
3 Correct 1 ms 332 KB n = 4, 21 is a correct answer
4 Correct 1 ms 332 KB n = 3, 4 is a correct answer
5 Correct 1 ms 332 KB n = 2, 62 is a correct answer
6 Correct 1 ms 300 KB n = 2, 3 is a correct answer
7 Correct 1 ms 296 KB n = 3, 29 is a correct answer
8 Correct 1 ms 332 KB n = 2, 3 is a correct answer
9 Correct 1 ms 300 KB n = 2, 3 is a correct answer
10 Correct 1 ms 332 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 332 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 332 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 296 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 300 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 332 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 332 KB n = 10, 3189 is a correct answer
19 Incorrect 1 ms 332 KB n = 10, incorrect answer: jury 7000000000 vs contestant 6000000000
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB n = 4, 80 is a correct answer
2 Correct 1 ms 332 KB n = 9, 110 is a correct answer
3 Correct 1 ms 332 KB n = 4, 21 is a correct answer
4 Correct 1 ms 332 KB n = 3, 4 is a correct answer
5 Correct 1 ms 332 KB n = 2, 62 is a correct answer
6 Correct 1 ms 300 KB n = 2, 3 is a correct answer
7 Correct 1 ms 296 KB n = 3, 29 is a correct answer
8 Correct 1 ms 332 KB n = 2, 3 is a correct answer
9 Correct 1 ms 300 KB n = 2, 3 is a correct answer
10 Correct 1 ms 332 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 332 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 332 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 296 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 300 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 332 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 332 KB n = 10, 3189 is a correct answer
19 Incorrect 1 ms 332 KB n = 10, incorrect answer: jury 7000000000 vs contestant 6000000000
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB n = 4, 80 is a correct answer
2 Correct 1 ms 332 KB n = 9, 110 is a correct answer
3 Correct 1 ms 332 KB n = 4, 21 is a correct answer
4 Correct 1 ms 332 KB n = 3, 4 is a correct answer
5 Correct 1 ms 332 KB n = 2, 62 is a correct answer
6 Correct 1 ms 300 KB n = 2, 3 is a correct answer
7 Correct 1 ms 296 KB n = 3, 29 is a correct answer
8 Correct 1 ms 332 KB n = 2, 3 is a correct answer
9 Correct 1 ms 300 KB n = 2, 3 is a correct answer
10 Correct 1 ms 332 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 332 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 332 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 332 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 296 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 300 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 332 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 332 KB n = 10, 3189 is a correct answer
19 Incorrect 1 ms 332 KB n = 10, incorrect answer: jury 7000000000 vs contestant 6000000000
20 Halted 0 ms 0 KB -