1 条题解
-
0
#include<bits/stdc++.h> using namespace std; #define int long long #define lc(p) tr[p].lc #define rc(p) tr[p].rc #define MID ((tr[p].l+tr[p].r)>>1) #define N 15000010//Q*log2(N)=5e5*log2(1e9)≈1.5e7 #define mod 998244353 struct node{ int l,r,a,b,lc,rc; }tr[N];int cnt,rt; int n,q; int a[N],b[N]; int newd(int l,int r){ int p=++cnt; tr[p]=(node){l,r,1,0,0,0}; return p; } //c(ax+b)+d=ac*x+(bc+d) void pushup(int p){ //注意22,23行不要打成 if(!lc(p)||!rc(p))return; if(!lc(p))lc(p)=newd(tr[p].l,MID); if(!rc(p))rc(p)=newd(MID+1,tr[p].r); tr[p].a=tr[rc(p)].a*tr[lc(p)].a%mod; tr[p].b=(tr[rc(p)].a*tr[lc(p)].b%mod+tr[rc(p)].b)%mod; } void change(int &p,int l,int r,int id,int a,int b){ if(!p)p=newd(l,r); if(tr[p].l==tr[p].r){ tr[p].a=a,tr[p].b=b; return; } if(id<=MID)change(lc(p),l,MID,id,a,b); else change(rc(p),MID+1,r,id,a,b); pushup(p); } int query(int p,int l,int r,int x){ if(!p||tr[p].r<l||tr[p].l>r)return x; if(l<=tr[p].l&&tr[p].r<=r)return (tr[p].a*x%mod+tr[p].b)%mod; return query(rc(p),l,r,query(lc(p),l,r,x)); } signed main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>q; cnt=0;rt=0; while(q--){ int op;cin>>op; if(op==0){ int p,x,y;cin>>p>>x>>y;p++; change(rt,1,n,p,x,y); } else{ int l,r,x;cin>>l>>r>>x;l++; cout<<query(rt,l,r,x)<<'\n'; } } return 0; }
- 1
信息
- ID
- 8128
- 时间
- 1000ms
- 内存
- 1024MiB
- 难度
- 6
- 标签
- 递交数
- 20
- 已通过
- 11
- 上传者