Submission #42683

#TimeUsernameProblemLanguageResultExecution timeMemory
42683fefeGap (APIO16_gap)C++14
30 / 100
74 ms3820 KiB
#include "gap.h"
#include<stack>
#define f MinMax
#define max(x,y) ((x)>(y)?(x):(y))
using namespace std;
long long findGap(int T, int N)
{
	long long s,e,ps,pe,maxx=0,x,y;
	if(T==1){
		f(0,(1LL<<62),&ps,&pe);
		N-=2;
		while(N>=2){
			f(ps+1,pe-1,&s,&e);
			N-=2;
			maxx=max(maxx,max(s-ps,pe-e));
			ps=s;pe=e;
		}
		if(N==1){
			f(ps+1,pe-1,&s,&e);
			return max(maxx,max(s-ps,pe-e));
		}
		return max(maxx,pe-ps);
	}
	f(0,(1LL<<62),&ps,&pe);
	x=0;
	struct node{
		long long x,s,e;
	};
	stack<node> st;
	node p;
	while(ps!=pe){
		y=x;
		while(1){
			f(ps+1,ps+(1LL<<y),&s,&e);
			if(s!=-1)	break;
			y++;
		}
		if(x!=y)	while(!st.empty())	st.pop();
		p.x=ps;p.s=s;p.e=e;
		st.push(p);
		x=y;
		ps=e;
	}
	if(x==0)	return 1;
	while(!st.empty()){
		p=st.top();st.pop();
		maxx=max(maxx,p.s-p.x);
	}
	return maxx;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...