zoukankan      html  css  js  c++  java
  • 【线段树】bzoj3038 上帝造题的七分钟2 / bzoj3211 花神游历各国

    暴力修改,记录一段是否全部为1或0,若全是了,则不再修改。

    注意3211一定要判是否为0,否则会T得惨无人道。

    #include<cstdio>
    #include<cmath>
    using namespace std;
    #define lson rt<<1,l,m
    #define rson rt<<1|1,m+1,r
    int f,c;
    typedef long long ll;
    inline void R(int &x){
        c=0;f=1;
        for(;c<'0'||c>'9';c=getchar())if(c=='-')f=-1;
        for(x=0;c>='0'&&c<='9';c=getchar())(x*=10)+=(c-'0');
        x*=f;
    }
    void P(ll x){
        if(x<10)putchar(x+'0');
        else{P(x/10);putchar(x%10+'0');}
    }
    ll sumv[400001];
    bool All[400001];
    int op;
    int x,y,n,m;
    void buildtree(int rt,int l,int r)
    {
    	if(l==r)
    	  {
    		int t; R(t); sumv[rt]=(ll)t;
    		if(sumv[rt]==1||sumv[rt]==0) All[rt]=1;
    		return;
    	  }
    	int m=(l+r)>>1;
    	buildtree(lson); buildtree(rson);
    	sumv[rt]=sumv[rt<<1]+sumv[rt<<1|1];
        All[rt]=(All[rt<<1]&All[rt<<1|1]);
    }
    void update(int ql,int qr,int rt,int l,int r)
    {
    	if(All[rt]) return;
    	if(l==r)
    	  {
    	  	sumv[rt]=sqrt(sumv[rt]);
    	  	if(sumv[rt]==1) All[rt]=1;
    	  	return;
    	  }
        int m=l+r>>1;
        if(ql<=m) update(ql,qr,lson);
        if(m<qr) update(ql,qr,rson);
        sumv[rt]=sumv[rt<<1]+sumv[rt<<1|1];
        All[rt]=(All[rt<<1]&All[rt<<1|1]);
    }
    ll query(int ql,int qr,int rt,int l,int r)
    {
        if(ql<=l&&r<=qr) return sumv[rt];
        int m=l+r>>1; ll res=0;
        if(ql<=m) res+=query(ql,qr,lson);
        if(m<qr) res+=query(ql,qr,rson);
        return res;
    }
    int main()
    {
    	R(n);
    	buildtree(1,1,n);
    	R(m);
    	for(int i=1;i<=m;++i)
    	  {
    	  	R(op); R(x); R(y);
    	  	if(op==2) update(x,y,1,1,n);
    	  	else P(query(x,y,1,1,n)),puts("");
    	  }
        return 0;
    }
  • 相关阅读:
    Qt之添加QLabel的点击事件
    Qt之布局管理--基本布局
    Qt之界面实现技巧
    Qt之键盘讲解
    Qt之多窗口切换
    Qt之自定义信号和槽函数
    Qt之重写QLabel类
    mysql学习(四)-字段类型
    mysql学习(三)
    mysql 复习与学习(二)数据库及表结构的创建删除
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/4189247.html
Copyright © 2011-2022 走看看