萌新求调abc F
  • 板块学术版
  • 楼主D2T1xubiaoshi
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/6/18 22:31
  • 上次更新2023/10/27 23:02:16
查看原帖
萌新求调abc F
390770
D2T1xubiaoshi楼主2022/6/18 22:31

rt

只AC了样例+四个点

//F
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

const int N = 2e5 + 10;
const ll P = 998244353;
int n, q;

struct BIT{
	#define lb(x) ((x)&-(x))
	ll bit[N];
	void add(int x, ll v){ while(x <= n) bit[x] = (bit[x]+v)%P, x += lb(x); }
	void mod(int x, ll v){ add(x, v - (ask(x) - ask(x-1))); }
	ll ask(int x){ ll r=0; while(x) r = (r+bit[x])%P, x -= lb(x); return r; }
} p0, p1, p2;

int main(){
	scanf("%d%d", &n, &q);
	for(int i = 1; i <= n; ++ i){
		ll a; scanf("%lld", &a);
		p0.add(i, a);
		p1.add(i, a*i);
		p2.add(i, a*i*i);
	}
	for(int i = 1; i <= q; ++ i){
		int op, x; scanf("%d%d", &op, &x);
		if(op == 1){
			ll v; scanf("%lld", &v);
			p0.mod(x, v);
			p1.mod(x, v*i);
			p2.mod(x, v*i*i);
		} else {
			ll a1 = p2.ask(x);
			ll a2 = (x+x+3) * p1.ask(x) % P;
			ll a3 = (x+1) * (x+2) % P * p0.ask(x) % P;
			printf("%lld\n", (a1-a2+a3+P)%P*499122177%P);  
		}
	}
	return 0;
}
2022/6/18 22:31
加载中...