이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "xylophone.h"
#include<bits/stdc++.h>
#define endl "\n"
#define all(v) v.begin(),v.end()
#define st first
#define nd second
#define mp make_pair
#define pb push_back
using namespace std;
typedef long long lo;
const int mod=1000000007,N=500005;
lo a,b,c,d,e,f,g=1,h[N];
pair<lo,lo>arr[N];
string s;
vector<lo>v;
// int query(int a,int b){ }
// void answer(int a,int b){ }
void solve(int n){
for(lo i=1;i<n;i++){
arr[i].st=query(i,i+1);
if(i<n-1)arr[i].nd=query(i,i+2);
}
h[1]=1;
for(lo i=1;i<=n-2;i++){
if(arr[i].st+arr[i+1].st==arr[i].nd)h[i+1]=h[i];
else h[i+1]=(h[i]^1);
}
lo sum=0;
pair<lo,lo>mx={0,1},mn={0,1};
for(lo i=1;i<n;i++){
if(h[i]==0)sum-=arr[i].st;
else sum+=arr[i].st;
if(mx.st<sum)mx={sum,i};
if(mn.st>sum)mn={sum,i};
}
if(mx.nd>mn.nd){
lo hehe=n-mx.st;
answer(1,hehe);
for(lo i=1;i<n;i++){
hehe+=arr[i].st*(h[i]==0?-1:1);
answer(i+1,hehe);
}
return;
}
h[1]=0;
sum=0;
lo mxi=0;
for(lo i=1;i<=n-2;i++){
if(arr[i].st+arr[i+1].st==arr[i].nd)h[i+1]=h[i];
else h[i+1]=(h[i]^1);
}
for(lo i=1;i<n;i++){
if(h[i]==0)sum-=arr[i].st;
else sum+=arr[i].st;
mxi=max(sum,mxi);
}
lo hehe=n-mxi;
answer(1,hehe);
for(lo i=1;i<n;i++){
hehe+=arr[i].st*(h[i]==0?-1:1);
answer(i+1,hehe);
}
}
// int main(){
// #ifdef local
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
// #endif
// ios_base::sync_with_stdio(false);
// cin.tie(NULL); cout.tie(NULL);
// // cin >> g;
// // while(g--)solve();
// }
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |