zoukankan      html  css  js  c++  java
  • HDU 1698 Just a Hook

    二次联通门 : HDU 1698 Just a Hook

    /*
        HDU 1698 Just a Hook
    
        线段树裸题
        
        区间覆盖。。。 
    */
    #include <cstdio>
    
    #define Max 1000002
    
    void read (int &now)
    {
        now = 0;
        register char word = getchar ();
        while (word < '0' || word > '9')
            word = getchar ();
        while (word >= '0' && word <= '9')
        {
            now = now * 10 + word - '0';
            word = getchar ();
        }
    } 
    
    struct Segment
    {
        struct Segment_Tree
        {
            int l;
            int r;
            int Ruri;
            int Sum;
            int Mid;
        };
        
        Segment_Tree tree[Max << 3];
        
        Segment_Tree *L, *R;
        
        void Build (int l, int r, int now)
        {
            tree[now].l = l;
            tree[now].r = r;
            tree[now].Ruri = 0;
            if (l == r)
            {
                tree[now].Sum = 1;
                return ;
            }
            tree[now].Mid = (l + r) >> 1;
            Build (l, tree[now].Mid, now << 1);
            Build (tree[now].Mid + 1, r, now << 1 | 1);
            tree[now].Sum = tree[now << 1].Sum + tree[now << 1 | 1].Sum;
        } 
        
        void Change_section (int l, int r, int now, int number)
        {
            if (tree[now].l == l && tree[now].r == r)
            {
                tree[now].Sum = (tree[now].r - tree[now].l + 1) * number;
                tree[now].Ruri = number;
                return ;
            }
            if (tree[now].Ruri)
            {
                L = &tree[now << 1];
                R = &tree[now << 1 | 1];  
                L->Ruri = tree[now].Ruri;
                R->Ruri = tree[now].Ruri;
                L->Sum = (L->r - L->l + 1) * tree[now].Ruri;
                R->Sum = (R->r - R->l + 1) * tree[now].Ruri;
                tree[now].Ruri = 0;
            }
            if (r <= tree[now].Mid)
                Change_section (l, r, now << 1, number);
            else if (l > tree[now].Mid)
                Change_section (l, r, now << 1 | 1, number);
            else
            {
                Change_section (l, tree[now].Mid, now << 1, number);
                Change_section (tree[now].Mid + 1, r, now << 1 | 1, number);
            }
            tree[now].Sum = tree[now << 1].Sum + tree[now << 1 | 1].Sum;
        }
        
        int Query_sum (int l, int r, int now)
        {
            if (tree[now].l == l && tree[now].r == r)
                return tree[now].Sum;
            if (tree[now].Ruri)
            {
                L = &tree[now << 1];
                R = &tree[now << 1 | 1];  
                L->Ruri = tree[now].Ruri;
                R->Ruri = tree[now].Ruri;
                L->Sum = (L->r - L->l + 1) * tree[now].Ruri;
                R->Sum = (R->r - R->l + 1) * tree[now].Ruri;
                tree[now].Ruri = 0;
            }
            tree[now].Sum = tree[now << 1].Sum + tree[now << 1 | 1].Sum;
            if (r <= tree[now].Mid)
                return Query_sum (l, r, now << 1);
            else if (l > tree[now].Mid)
                return Query_sum (l, r, now << 1 | 1);
            else
                return Query_sum (l, tree[now].Mid, now << 1) + Query_sum (tree[now].Mid + 1, r, now << 1 | 1);
        }
    };
    
    Segment Tree;
    
    int N, M;
    
    int main (int argc, char *argv[])
    {
        int T;
        read (T);
        static int N;
        int M;
        for (int ZlycerQan = 1; ZlycerQan <= T; ZlycerQan++)
        {
            read (N);
            Tree.Build (1, N, 1); 
            read (M);
            int x, y, value;
            while (M--)
            {
                read (x);
                read (y);
                read (value);
                Tree.Change_section (x, y, 1, value);
            }
            printf ("Case %d: The total value of the hook is %d.
    ", ZlycerQan, Tree.tree[1].Sum);
        }
        return 0;
    }
  • 相关阅读:
    设计模式_EventObject和EventListener
    设计模式_Observable与Observer
    zooKeeper_《ZooKeeper官方指南》一致性保障
    thread_为什么多线程是个坏主意
    gtk+学习笔记(三)
    linux c下输入密码不回显
    浮点数在计算机内存中的存储方式
    gtk+学习笔记(二)
    linux下c图形化编程之gtk+2.0简单学习
    关于字符串排序合并的问题
  • 原文地址:https://www.cnblogs.com/ZlycerQan/p/6749038.html
Copyright © 2011-2022 走看看