奇怪CE求问
  • 板块学术版
  • 楼主baka24
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/3/25 12:23
  • 上次更新2024/3/25 16:46:17
查看原帖
奇怪CE求问
635570
baka24楼主2024/3/25 12:23

题目是CF1032G,在洛谷ide、本地 Linux和windows 都没事,但交上去就会 CE

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define pii pair<int,int>
#define fr first
#define sc second
#define mk make_pair
#define inx int i=h[u],v=edge[i].v,w=edge[i].w;~i;i=edge[i].nx,v=~i?edge[i].v:0,w=~i?edge[i].w:0
#define x1 x114514
#define y1 y114514
const int MAXN=300010,N=19,ie9=1000000000,Mod=998244353;
int n,a[MAXN],lg[MAXN],ans;
struct STB{
	pii f[N+1][MAXN],g[N+1][MAXN];
	void build(){
		for(int i=1;i<=n*3;i++){
			f[0][i]=mk(min(3*n,i+a[i]),i);
			g[0][i]=mk(max(1ll,i-a[i]),i);
		}
		for(int i=1;i<=N;i++){
			for(int j=1;j<=n*3-(1<<i)+1;j++){
				f[i][j]=max(f[i-1][j],f[i-1][j+(1<<i-1)]);
			}
			for(int j=1;j<=n*3-(1<<i)+1;j++){
				g[i][j]=min(g[i-1][j],g[i-1][j+(1<<i-1)]);
			}
		}
	}
	pii query(int l,int r){
		int tmp=lg[r-l+1];
		return mk(min(g[tmp][l],g[tmp][r-(1<<tmp)+1]).sc,max(f[tmp][l],f[tmp][r-(1<<tmp)+1]).sc);
	}
}stb;
pii f[N][MAXN];
void slv(){
	scanf("%lld",&n);
	for(int i=2;i<=300000;i++)lg[i]=lg[i>>1]+1;
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		a[i+n]=a[i];
		a[i+2*n]=a[i];
	}
	for(int i=1;i<=3*n;i++)f[0][i]=mk(max(1ll,i-a[i]),min(3*n,i+a[i]));
	stb.build();
	for(int i=1;i<=N;i++){
		for(int j=1;j<=n*3;j++){
			pii tmp=stb.query(f[i-1][j].fr,f[i-1][j].sc);
			f[i][j].fr=min(f[i-1][tmp.fr].fr,f[i-1][tmp.sc].fr);
			f[i][j].sc=max(f[i-1][tmp.fr].sc,f[i-1][tmp.sc].sc);
		}
	}
	for(int i=n+1;i<=2*n;i++){
		int cnt=0,l=i,r=i;
		for(int j=N;~j;j--){
			pii tmp=stb.query(l,r);
			l=tmp.fr,r=tmp.sc;
			int L=min(f[j][l].fr,f[j][r].fr),R=max(f[j][r].sc,f[j][l].sc);
			if(R-L+1>=n)continue;
			l=L;r=R;cnt+=1<<j;
		}
		printf("%lld ",cnt+1);
	}
}
signed main(){
    slv();
    return 0;
}
2024/3/25 12:23
加载中...