记录编号 582059 评测结果 AAAAAAAAAA
题目名称 Color the Axis 最终得分 100
用户昵称 Gravatar宇战 是否通过 通过
代码语言 C++ 运行时间 4.496 s
提交时间 2023-09-01 21:02:31 内存使用 127.81 MiB
显示代码纯文本
#include<bits/stdc++.h>
    using namespace std;
    int n,m,s;
    const int N=1e6*4;
    struct node{
        int L,R;
        long long sum,lazy=1;
    }t[N];
    long long a[N];
    void build(int p,int l,int r){
        t[p].L=l;
        t[p].R=r;
        if(l==r){
            t[p].sum=a[l];
            return ;
        }
        int mid=(l+r)/2;
        build(p<<1,l,mid);
        build(p<<1|1,mid+1,r);
        t[p].sum=t[p*2+1].sum+t[p*2].sum;
    }
    void spread(int p){
        if(!t[p].lazy){
            t[p*2].sum=(long long)t[p].lazy*(t[p*2].R-t[p*2].L+1);
            t[p*2].lazy=t[p].lazy;
            t[p*2+1].sum=(long long)t[p].lazy*(t[p*2+1].R-t[p*2+1].L+1);
            t[p*2+1].lazy=t[p].lazy;
            t[p].lazy=1;
        }
    }
    void change(int p,int l,int r,int c){
        if(t[p].L>=l&&t[p].R<=r){
            t[p].sum=(long long)c*(t[p].R-t[p].L+1); 
            t[p].lazy=c;
            return;
        }
        spread(p);
        int mid=(t[p].L+t[p].R)/2;
        if(l<=mid)change(p*2,l,r,c);
        if(r>mid)change(p*2+1,l,r,c);
        t[p].sum=t[p*2].sum+t[p*2+1].sum;
    }
    
    long long ask(int p,int l,int r){
    if(t[p].R<l||t[p].L>r){
        return 0;
        }
        if(l<=t[p].L&&r>=t[p].R){
            return t[p].sum;
        }
        spread(p);
        int mid=(t[p].L+t[p].R)/2;
        long long val=0;
        if(l<=mid){
              val+=ask(p*2,l,r);   
        }
        if(r>mid){
               val+=ask(p*2+1,l,r); 
        }
        return val; 
   }
    int main(){
        freopen("axis.in","r",stdin);
        freopen("axis.out","w",stdout);
          cin>>n;
          for(int i=1;i<=n;i++){
              a[i]=1;
          }
          build(1,1,n);
          cin>>m;
          for(int i=1;i<=m;i++){
              int l,r;
              cin>>l>>r;
              change(1,l,r,0);
              cout<<ask(1,1,n)<<endl;
          }
    }