zoukankan      html  css  js  c++  java
  • HDU1698 Just a Hook

    初始的时候,整个序列都是1,接下来,每次输入l,r,x。表示将l到r之间修改为x且x只会是1、2、3,最后问你序列总和。

    线段树成段更新~

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=1e6+14;
    struct node {
        int l;
        int r;
        int lazy;
        int tag;
        int sum;
    }segTree[maxn*4];
    void build (int i,int l,int r) {
        segTree[i].l=l;
        segTree[i].r=r;
        segTree[i].lazy=0;
        segTree[i].tag=0;
        if (l==r) {
            segTree[i].sum=1;
            return;
        }
        int mid=(l+r)>>1;
        build(i<<1,l,mid);
        build(i<<1|1,mid+1,r);
        segTree[i].sum=segTree[i<<1].sum+segTree[i<<1|1].sum;
    } 
    void update (int i,int l,int r,int v) {
        if (segTree[i].l==l&&segTree[i].r==r) {
            segTree[i].lazy=1;
            segTree[i].tag=v;
            segTree[i].sum=(r-l+1)*v;
            return;
        }
        int mid=(segTree[i].l+segTree[i].r)>>1;
        if (segTree[i].lazy==1) {
            segTree[i].lazy=0;
            update(i<<1,segTree[i].l,mid,segTree[i].tag);
            update(i<<1|1,mid+1,segTree[i].r,segTree[i].tag);
            segTree[i].tag=0; 
        }
        if (r<=mid) update(i<<1,l,r,v);
        else if (l>mid) update(i<<1|1,l,r,v);
        else {
            update(i<<1,l,mid,v);
            update(i<<1|1,mid+1,r,v);
        }
        segTree[i].sum=segTree[i<<1].sum+segTree[i<<1|1].sum; 
    }
    int main () {
        int x,y,z,n,m,T;
        scanf ("%d",&T);
        for (int i=1;i<=T;i++) {
            scanf ("%d %d",&n,&m);
            build (1,1,n);
            while (m--) {
                scanf ("%d %d %d",&x,&y,&z);
                update(1,x,y,z);
            }
            printf ("Case %d: The total value of the hook is %d.
    ",i,segTree[1].sum);
        }
        return 0;
    }
  • 相关阅读:
    C#轻量级企业事务
    扩展方法
    JDK Environment Variable And Change default JDK
    AsyncTask简单获取网络图片的例子
    mysql基础
    Oracle基础操作
    java 中 colkection集合、迭代器、增强for、泛型
    centos7 解决 mysql_connect()不支持请检查mysql模块是否正确加载
    python 操作MySQL避坑1064
    面向对象学习
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12307099.html
Copyright © 2011-2022 走看看