比赛 |
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;
}