제출 #278068

#제출 시각아이디문제언어결과실행 시간메모리
278068erkamXylophone (JOI18_xylophone)C++17
0 / 100
0 ms384 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...