【捞】求助线段树!!!
  • 板块学术版
  • 楼主Turtle_ReG
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/9/5 19:37
  • 上次更新2023/10/27 12:27:43
查看原帖
【捞】求助线段树!!!
708995
Turtle_ReG楼主2022/9/5 19:37

如题,问题如下 P3373 看测评记录里面有很多同学,对的和错的数据点都和我一样qwq,自己改了半天一点头绪都没有 求大佬救救!!!

附上代码:

#include<bits/stdc++.h>
#define ll long long int
#define il inline
#define maxn 500001
using namespace std;
ll ans[maxn<<2],tag[maxn<<2],a[maxn],n,m,tax[maxn<<2],p1;
il void read(){
    cin>>n>>m>>p1;
    for(int i=1;i<=n;i++)cin>>a[i];
}
il ll ls(ll p){
    return p<<1;
} 
il ll rs(ll p){
    return p<<1|1;
}
il void push_up(ll p){
    ans[p]=ans[ls(p)]+ans[rs(p)];
}
il void build(ll p,ll l,ll r){
    tag[p]=0; 
    if(l==r){ans[p]=a[l];return;}
    ll mid=(l+r)/2;
    build(ls(p),l,mid);
    build(rs(p),mid+1,r);
    push_up(p);
}
il void f(ll p,ll l,ll r,ll k,ll x){ 
    tag[p]+=(x-1)*tag[p]+k;
    tag[p]%=p1;
    tax[p]*=x;
    tax[p]%=p1;
    ans[p]*=x;
    ans[p]+=k*(r-l+1);
    ans[p]%=p1;
}/*应该是这里出问题了qwq
    */ 
il void push_down(ll p,ll l,ll r){ 
    ll mid=(l+r)/2;
    f(ls(p),l,mid,tag[p],tax[p]);
    f(rs(p),mid+1,r,tag[p],tax[p]);
    tag[p]=0;
    tax[p]=1;
}
il void update(ll p,ll nl,ll nr,ll l,ll r,ll k,ll x){
    if(nl<=l&&nr>=r){f(p,l,r,k,x);return;}
    push_down(p,l,r);
    ll mid=(l+r)/2; 
    if(nl<=mid)update(ls(p),nl,nr,l,mid,k,x);
    if(nr>mid)update(rs(p),nl,nr,mid+1,r,k,x);
    push_up(p);
}
il ll query(ll p,ll ql,ll qr,ll l,ll r){
    ll res=0;
    if(ql<=l&&qr>=r){return ans[p];}
    push_down(p,l,r);
    ll mid=(l+r)/2;
    if(ql<=mid)res+=query(ls(p),ql,qr,l,mid)%p1;
    if(qr>mid)res+=query(rs(p),ql,qr,mid+1,r)%p1;
    return res%p1;
}
int main(){
    ll ord,x,y,k,t; 
    read();
    for(int i=1;i<=n;i++)tax[i]=1;  
    build(1,1,n);
    for(int i=1;i<=m;i++){
        cin>>ord;
        if(ord==1){
            cin>>x>>y>>k;   
            update(1,x,y,1,n,0,k);
        }
        else if(ord==2){
            cin>>x>>y>>k;
            update(1,x,y,1,n,k,1);
        }
        else if(ord==3){cin>>x>>y;
        t=query(1,x,y,1,n);
        cout<<t<<endl; 
        }
    }
    return 0;
}
2022/9/5 19:37
加载中...