萌新求助
查看原帖
萌新求助
307987
ztytql楼主2023/1/14 15:08

rt,样例过了,但是0分

#include <bits/stdc++.h>
using namespace std;

const int N = 200010;

int n, m, k, jmp[N], stp[N], a[N], lb[N], rb[N];

void modify(int l, int r)
{
	//cout << l << " " << r << endl;
	for (int i = r ; i >= l ; i --)
		if (a[i] + i > rb[i])
			jmp[i] = a[i] + i, stp[i] = 1;
		else
			jmp[i] = jmp[a[i] + i], stp[i] = stp[a[i] + i] + 1;
}

int query(int x)
{
	int ans = 0;
	while (x < n)
		ans += stp[x], x = jmp[x];
	return ans;
}

int main()
{
	cin >> n;
	k = sqrt(n);
	for (int i = 0 ; i < n ; i ++)
		cin >> a[i];
	for (int i = 0 ; i <= n / k ; i ++)
		lb[i] = i * k, rb[i] = min((i + 1) * k - 1, n - 1);
	modify(0, n - 1);
	cin >> m;
	while (m --)
	{
		int i, j, p;
		cin >> i >> j;
		if (i == 1)
			cout << query(j) << endl;
		else
		{
			cin >> p;
			a[j] = p;
			modify(lb[j / k], rb[j / k]);
			//for (int i = 0 ; i < n ; i ++) cout << jmp[i] << " " << stp[i] << endl;
		}
	}
    return 0;
}
2023/1/14 15:08
加载中...