UOJ #206. APIO2016Gap

Posted Boss.Pi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UOJ #206. APIO2016Gap相关的知识,希望对你有一定的参考价值。

Description

Solution

第一个子任务,直接从 \\((a[i],a[j])\\) 推出 \\((a[i+1],a[j-1])\\) 就行了,只需要 \\(\\frac{N+1}{2}\\)
第二个子任务,首先答案至少是 \\(\\lceil\\frac{max-min}{N-1}\\rceil\\)
然后我们就只关心长度大于 \\(ans\\) 的区间了,每一次扩展下去,就可以遍历到所有相邻点,更新一下答案
每一个点刚好贡献两次,加上刚开始找 \\(max\\)\\(min\\) 的次数刚好是 \\(3*N\\)

#include "gap.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll a[N],inf=1e18;
long long findGap(int T, int n)
{
	if(T==1){
		ll ans=0;
		a[0]=-1;a[n+1]=inf+10;
		for(int l=1,r=n;l<=r;l++,r--)
			MinMax(a[l-1]+1,a[r+1]-1,&a[l],&a[r]);
		for(int i=2;i<=n;i++)ans=max(ans,a[i]-a[i-1]);
		return ans;
	}
	else{
		ll l=0,r=inf,last=-1;
		MinMax(l,r,&l,&r);
		ll ans=(r-l+n-2)/(n-1);
		for(ll i=l;i<=r;){
			ll s=i,t=i+ans;
			MinMax(s,t,&s,&t);i+=ans+1;
			if(last!=-1 && s!=-1)ans=max(ans,s-last);
			if(t!=-1)last=t;
		}
		return ans;
	}
}

以上是关于UOJ #206. APIO2016Gap的主要内容,如果未能解决你的问题,请参考以下文章

uoj206 [APIO2016]最大差分

[APIO2016]Gap

APIO2016

[UOJ206]Gap

APIO2016Gap

交互题(apio2016Gap)