#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 |
- |