TLE on #16 求助
  • 板块CF13E Holes
  • 楼主coderjmc
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/7/23 19:11
  • 上次更新2023/11/3 08:03:00
查看原帖
TLE on #16 求助
795163
coderjmc楼主2023/7/23 19:11

不知道为啥TLE

#include<iostream>
#include<math.h>
#define int long long
using namespace std;
int st[450],ed[450],bel[200005],a[200005],to[200005],f[200005],dao[200005];
signed main(){
	cin.tie(0);cout.tie(0);
	ios::sync_with_stdio(false);
	int n,m;
	cin>>n>>m; 
	int block=sqrt(n);
	int t=n/block;
	if(n%block)t++;
	for(int i=1;i<=t;i++){
		st[i]=(i-1)*block+1;
		ed[i]=i*block;
	}
	ed[t]=n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		bel[i]=(i-1)/block+1;
	}
	for(int i=n;i>=1;i--){
		if(i+a[i]>ed[bel[i]]){
			f[i]=1;
			to[i]=i+a[i];
			dao[i]=i;
		}
		else{
			f[i]=f[i+a[i]]+1;
			to[i]=to[i+a[i]];
			dao[i]=dao[i+a[i]];
		}
	}
	while(m--){
		int x,y;
		cin>>x>>y;
		if(x==1){
			int sum=0,maxx=-1;
			while(y<=n){
				sum+=f[y];
				maxx=dao[y];
				y=to[y];
			}
			cout<<maxx<<" "<<sum<<endl;
		}
		else{
			int k;
			cin>>k;
			a[y]=k;
			for(int i=ed[bel[y]];i>=st[bel[y]];i--){
				if(i+a[i]>=ed[bel[y]]){
					f[i]=1;
					to[i]=i+a[i];
					dao[i]=i;
				}
				else{
					f[i]=f[i+a[i]]+1;
					to[i]=to[i+a[i]];
					dao[i]=dao[i+a[i]];
				}
			}
		}
	}
}
2023/7/23 19:11
加载中...