zoukankan      html  css  js  c++  java
  • CF438D The Child and Sequence 线段树

    给定数列,区间查询和,区间取模,单点修改。

    n,m小于10^5

    。。。当区间最值小于模数时,就直接返回就好啦~

    #include<cstdio>
    #include<iostream>
    #define R register int
    #define ls (tr<<1)
    #define rs (tr<<1|1)
    using namespace std;
    inline long long g() {
        register long long ret=0,fix=1; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-1:fix;
        do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret*fix;
    }
    int n,m,M;
    long long sum[400010],mx[400010],cnt[400010];
    inline void upd(int tr) {sum[tr]=sum[ls]+sum[rs]; mx[tr]=max(mx[ls],mx[rs]);}
    inline void build(int tr,int l,int r) {
        if(l==r) {mx[tr]=sum[tr]=g(); return ;}
        R md=(l+r)>>1; build(ls,l,md),build(rs,md+1,r); upd(tr);
    }
    inline void chg(int tr,int l,int r,int pos,int x) {
        if(l==r) {sum[tr]=mx[tr]=x; return ;} R md=(l+r)>>1;
        if(pos>md) chg(rs,md+1,r,pos,x);
        else chg(ls,l,md,pos,x); upd(tr);
    }
    inline void change(int tr,int l,int r,int LL,int RR) {
        if(mx[tr]<M) return ; 
        if(l==r) {mx[tr]=sum[tr]=sum[tr]%M; return ;}
        R md=(l+r)>>1; 
        if(LL>md) change(rs,md+1,r,LL,RR);
        else if(RR<md+1) change(ls,l,md,LL,RR);
        else change(ls,l,md,LL,md),change(rs,md+1,r,md+1,RR); upd(tr);
    }
    inline long long query(int tr,int l,int r,int LL,int RR) {
        if(l==LL&&r==RR) return sum[tr];
        R md=(l+r)>>1; 
        if(LL>md) return query(rs,md+1,r,LL,RR);
        else if(RR<md+1) return query(ls,l,md,LL,RR);
        else return query(ls,l,md,LL,md)+query(rs,md+1,r,md+1,RR);
    }
    signed main() {
        n=g(),m=g(); build(1,1,n);
        for(R i=1,k,l,r;i<=m;++i) {
            k=g(),l=g(),r=g();
            if(k==1) printf("%lld
    ",query(1,1,n,l,r));
            else if(k==2) M=g(),change(1,1,n,l,r);
            else chg(1,1,n,l,r);
        }
    }

    2019.04.18

  • 相关阅读:
    ERROR in static/js/0.705716c542478b712e7e.js from UglifyJs Unexpected token: punc-分析打包过程可能遇到的报错
    CALL_AND_RETRY_LAST Allocation failed
    处理精度丢之-浮点数在计算机中是如何存储的
    webpack升级路上走过的路---之babel篇
    来自nvm的玩耍
    npm版本号的了解
    Vue-组件之间的通信
    gitkraken不能打开私有仓库
    02 Angular 闪现表达式原型问题
    01 Angular
  • 原文地址:https://www.cnblogs.com/Jackpei/p/10731836.html
Copyright © 2011-2022 走看看