1 条题解
-
0
#include<bits/stdc++.h> using namespace std; #define int long long const int N=2e5+10,P=998244353; #define lc(p) (p<<1) #define rc(p) (p<<1|1) struct node{int l,r,s1,s2,s3,tag;}tr[N<<2]; void mod(int &x){x=(x%P+P)%P;} void pushup(int p) { tr[p].s1=tr[lc(p)].s1+tr[rc(p)].s1;mod(tr[p].s1); tr[p].s2=tr[lc(p)].s2+tr[rc(p)].s2;mod(tr[p].s2); tr[p].s3=tr[lc(p)].s3+tr[rc(p)].s3;mod(tr[p].s3); } void pushdown(int p) { if(tr[p].tag) { tr[lc(p)].s2+=tr[lc(p)].s1*tr[p].tag;mod(tr[lc(p)].s2); tr[rc(p)].s2+=tr[rc(p)].s1*tr[p].tag;mod(tr[rc(p)].s2); tr[lc(p)].s3+=tr[p].tag*(tr[lc(p)].r-tr[lc(p)].l+1);mod(tr[lc(p)].s3); tr[rc(p)].s3+=tr[p].tag*(tr[rc(p)].r-tr[rc(p)].l+1);mod(tr[rc(p)].s3); tr[lc(p)].tag+=tr[p].tag;tr[rc(p)].tag+=tr[p].tag;mod(tr[lc(p)].tag);mod(tr[rc(p)].tag); tr[p].tag=0; } } void bt(int p,int l,int r) { tr[p].l=l,tr[p].r=r; if(l==r){tr[p].s1=l;return;} int mid=(l+r)>>1; bt(lc(p),l,mid);bt(rc(p),mid+1,r); pushup(p); } void change(int p,int l,int r,int x) { if(tr[p].l>r||tr[p].r<l)return; if(l<=tr[p].l&&tr[p].r<=r) { tr[p].s2+=tr[p].s1*x;mod(tr[p].s2); tr[p].s3+=x*(tr[p].r-tr[p].l+1);mod(tr[p].s3); tr[p].tag+=x;mod(tr[p].tag); return; } pushdown(p); change(lc(p),l,r,x);change(rc(p),l,r,x); pushup(p); } int query(int p,int l,int r) { if(tr[p].l>r||tr[p].r<l)return 0; if(l<=tr[p].l&&tr[p].r<=r)return tr[p].s2; pushdown(p); int ans=query(lc(p),l,r)+query(rc(p),l,r);mod(ans); return ans; } int query1(int p,int l,int r) { if(tr[p].l>r||tr[p].r<l)return 0; if(l<=tr[p].l&&tr[p].r<=r)return tr[p].s3; pushdown(p); int ans=query1(lc(p),l,r)+query1(rc(p),l,r);mod(ans); return ans; } int a[N]; signed main() { int n,q;cin>>n>>q; for(int i=1;i<=n;i++)cin>>a[i]; bt(1,1,n); for(int i=1;i<=n;i++)change(1,i,n,a[i]); for(int i=1;i<=q;i++) { int op;cin>>op; if(op==1) { int x,k;cin>>x>>k; int sum=k-a[x]; change(1,x,n,sum); a[x]=k; } else { int x;cin>>x; int sum=query(1,1,x),sum1=query1(1,1,x); int ans=sum1*(x+1)%P-sum;mod(ans); cout<<ans<<'\n'; } } return 0; }
- 1
信息
- ID
- 9981
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 9
- 标签
- 递交数
- 13
- 已通过
- 3
- 上传者