6.Transformation

Transformation

#include
#include
#define qc std::ios::sync_with_stdio(false)
using namespace std;
const int maxl=1e5+10;
const int mod=10007;
struct seg_t
{
    int R,L,mid;
    int mul,add;
    long long sum[3];
};
seg_t tree[maxl<<2];
int n,m;
void debug(){
    // for(int i=1;i>1;
    if(tree[k].L==tree[k].R){
        for(int i=0;i<3;i++)
            tree[k].sum[i]=0;
        tree[k].mul=1;
        tree[k].add=0;
        //tree[k].sev_=false;
        return;
    }
    //if(tree[k].Rr)return;
    buid(k<<1,tree[k].L,tree[k].mid);
    buid(k<<1|1,tree[k].mid+1,tree[k].R);
    pushup(k);
}
void tree_update(int k,int l,int r,int mx,int ax){
    if(tree[k].L>=l&&tree[k].R<=r){
        tree_caul(k,mx,ax);
        return;
    }
    pushdown(k);
    if(l<=tree[k].mid)tree_update(k<<1,l,r,mx,ax);
    if(r>tree[k].mid)tree_update(k<<1|1,l,r,mx,ax);
    pushup(k);
}
int querry(int k,int l,int r,int p){
    if(tree[k].L>=l&&tree[k].R<=r){
        return tree[k].sum[p]%mod;
    }
    pushdown(k);
    int ans_sum=0;
    if(l<=tree[k].mid)ans_sum+=querry(k<<1,l,r,p)%mod;
    if(r>tree[k].mid)ans_sum+=querry(k<<1|1,l,r,p)%mod;
    return ans_sum%mod;
}
int main(){
    qc;
    while (cin>>n>>m)
    {
        if(n==0&&m==0)break;
        memset(tree,0,sizeof(tree));
        buid(1,1,n);
        int f,a,b,c;
        while (m--)
        {
            cin>>f>>a>>b>>c;
            if(f==1)tree_update(1,a,b,1,c);
            if(f==2)tree_update(1,a,b,c,0);
            if(f==3)tree_update(1,a,b,0,c);
            if(f==4)cout<

你可能感兴趣的:(6.Transformation)