记录编号 418529 评测结果 AAAAAAAAAA
题目名称 [雅礼集训 2017] jump 最终得分 100
用户昵称 GravatarAntiLeaf 是否通过 通过
代码语言 C++ 运行时间 1.765 s
提交时间 2017-06-30 17:12:04 内存使用 20.38 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100005;
int n,mn[maxn<<2],mx[maxn<<2],s,t,ans_min,ans_max;;
struct DS{
	int l[maxn],r[maxn];
	void build(int L,int R,int rt)const{
		if(L==R){
			mn[rt]=l[L];
			mx[rt]=r[L];
			return;
		}
		int mid=(L+R)>>1;
		build(L,mid,rt<<1);
		build(mid+1,R,rt<<1|1);
		mn[rt]=min(mn[rt<<1],mn[rt<<1|1]);
		mx[rt]=max(mx[rt<<1],mx[rt<<1|1]);
	}
	void query(int l,int r,int rt)const{
		if(s<=l&&t>=r){
			ans_min=min(ans_min,mn[rt]);
			ans_max=max(ans_max,mx[rt]);
			return;
		}
		int mid=(l+r)>>1;
		if(s<=mid)query(l,mid,rt<<1);
		if(t>mid)query(mid+1,r,rt<<1|1);
	}
	DS operator+(const DS &b)const{
		static DS c;
		build(1,n,1);
		for(int i=1;i<=n;i++){
			s=b.l[i];
			t=b.r[i];
			ans_min=(~0u)>>1;
			ans_max=1<<31;
			query(1,n,1);
			c.l[i]=ans_min;
			c.r[i]=ans_max;
		}
		return c;
	}
	operator bool()const{
		static int pmn[maxn];
		pmn[0]=(~0u)>>1;
		for(int i=1;i<=n;i++){
			pmn[i]=min(pmn[i-1],r[i]);
			if(pmn[l[i]-1]<i)return true;
		}
		return false;
	}
}pw[17],now,tmp;
int main(){
	freopen("jump2017.in","r",stdin);
	freopen("jump2017.out","w",stdout);
	scanf("%d",&n);
	for(int i=1,x;i<=n;i++){
		scanf("%d",&x);
		pw[0].l[i]=max(i-x,1);
		pw[0].r[i]=min(i+x,n);
		now.l[i]=now.r[i]=i;
	}
	for(int i=1;i<17;i++)pw[i]=pw[i-1]+pw[i-1];
	int ans=0;
	for(int i=16;~i;i--)if((tmp=now+pw[i])){
		ans|=1<<i;
		now=tmp;
	}
	printf("%d",ans+1);
	return 0;
}
/*
8
7 1 1 1 1 1 1 7
*/