比赛 2025.3.6 评测结果 AAAAAAAAAA
题目名称 弹飞绵羊 最终得分 100
用户昵称 flyfree 运行时间 3.107 s
代码语言 C++ 内存使用 8.83 MiB
提交时间 2025-03-06 19:19:19
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pir pair<ll,ll>
#define ls first
#define rs second
#define mp make_pair
#define mod
#define MAXN 200010
#define len 450
#define qmod(x) (x>mod?x-mod:x)
// By flyfreemrn
inline ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
ll k[MAXN],dis[MAXN],nxt[MAXN];
ll block[MAXN],L[MAXN],R[MAXN];
ll n,m,tot;
void change(ll i){
	for(int j=R[i];j>=L[i];j--){
		if(j+k[j]>n){
			dis[j]=1;
			nxt[j]=n+1;
		}else if(block[j+k[j]]!=block[j]){
			dis[j]=1;
			nxt[j]=j+k[j];
		}else{
			dis[j]=dis[j+k[j]]+1;
			nxt[j]=nxt[j+k[j]];
		}
	}
}
ll query(ll pos){
	ll res=0;
	while(pos<=n){
		res+=dis[pos];
		pos=nxt[pos];
	}
	return res;
}
void modify(ll pos,ll val){
	k[pos]=val;
	ll p=block[pos];
	change(p);
}
int main(){
	freopen("bzoj_2002.in","r",stdin);
	freopen("bzoj_2002.out","w",stdout);
	n=read();
//	len=ceil(sqrt(n));
	tot=n/len;
	for(int i=1;i<=tot;i++){
		L[i]=R[i-1]+1;
		R[i]=len*i;
	}
	if(R[tot]<n){
		tot++;
		R[tot]=n;
		L[tot]=R[tot-1]+1;
	}
	for(int i=1;i<=tot;i++){
		for(int j=L[i];j<=R[i];j++){
			k[j]=read();
			block[j]=i;
		}
	}
	for(int i=tot;i;i--)change(i);
	m=read();
	for(int i=1;i<=m;i++){
		ll type=read();
		if(type==1){
			ll pos=read()+1;
			cout<<query(pos)<<endl;
		}else{
			ll pos=read()+1,val=read();
			modify(pos,val);
		}
	}
	return 0;
}