Submission #1315243

#TimeUsernameProblemLanguageResultExecution timeMemory
1315243vtnooXylophone (JOI18_xylophone)C++20
100 / 100
28 ms448 KiB
#include "xylophone.h"
#include <bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); i++)
#define R(i, j, k) for(int i = (j); i >= (k); i--)
#define ll long long
#define sz(a) ((int) a.size())
#define all(a) a.begin(), a.end()
#define vi vector<ll>
#define pb emplace_back
#define me(a, x) memset(a, x, sizeof(a))
#define fst first
#define snd second
#define ii pair<ll, ll>
using namespace std;

const int MAXN=5000;

static int A[MAXN];
int diff[MAXN+5],type[MAXN+5];

void solve(int N) {
	//~ cout<<"HOLA"<<endl;
	L(i,0,N-2){
		diff[i]=query(i+1,i+2);
	}
	//~ cout<<"HOLAAA"<<endl;
	L(i,1,N-2){
		if(diff[i-1]+diff[i]==query(i,i+2)){
			type[i]=type[i-1];
		}else{
			type[i]=type[i-1]^1;
		}
	}// ya tengo el array de subidas y bajadas
	//~ cout<<"HOLAAAAAA"<<endl;
	L(paso,1,2){
		//~ cout<<"HOLA2"<<endl;
		vi res(N,0);
		L(i,0,N-2){
			if(type[i]==1){
				res[i+1]=res[i]+diff[i];
			}else{
				res[i+1]=res[i]-diff[i];
			}
		}	
		//~ cout<<"HOLA3"<<endl;
		int minpos=min_element(all(res))-res.begin();
		int maxpos=max_element(all(res))-res.begin();
		//~ cout<<minpos<<" "<<maxpos<<endl;
		if(minpos>maxpos){
			L(i,0,N-2)type[i]^=1;
			continue;
		}
		//~ cout<<"HOLA4"<<endl;
		int norm=1-res[minpos];
		//~ cout<<norm<<endl;
		L(i,0,N-1)res[i]+=norm;
		L(i,0,N-1)answer(i+1,res[i]);
		break;
	}
	return;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...