• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            The Fourth Dimension Space

            枯葉北風(fēng)寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢(mèng)令

            HDOJ 1698 Just a Hook 線段樹

            題目的意思是給你一個(gè)數(shù)組,大小是N,初始的時(shí)候,a[1-N]均為1,然后有Q個(gè)操作,每次操作修改某個(gè)區(qū)間中的值,求最后整個(gè)區(qū)間1-N的和。線段樹解決

            #include<iostream>
            using namespace std;

            int const maxn=100100;

            struct node
            {
                
            int n;
                
            int l,r;
            }
            tree[maxn*4];

            void build(int l,int r,int i)
            {
                tree[i].l
            =l;
                tree[i].r
            =r;
                
            if(l==r)
                    
            return;

                
            int mid=(l+r)>>1;
                build(l,mid,i
            *2);
                build(mid
            +1,r,i*2+1);
            }


            void update(int l,int r,int n,int i)
            {
                
            if(l==tree[i].l&&r==tree[i].r)
                
            {
                    tree[i].n
            =n;
                    
            return ;
                }

                
            if(l>r)
                    
            return ;
                
            int nn=tree[i].n;
                
            if(tree[i].n!=0)
                
            {
                    
            if(l!=tree[i].l||r!=tree[i].r)
                    
            {
                        
                        
            int mid=(tree[i].l+tree[i].r)>>1;
                        
            if(r<=mid)
                        
            {
                            update(l,r,n,i
            *2);
                            update(tree[i].l,l
            -1,nn,i*2);
                            update(r
            +1,mid,nn,i*2);
                            update(mid
            +1,tree[i].r,nn,i*2+1);
                        }

                        
            else if(l>mid)
                        
            {
                            update(l,r,n,i
            *2+1);
                            update(r
            +1,tree[i].r,nn,i*2+1);
                            update(mid
            +1,l-1,nn,i*2+1);
                            update(tree[i].l,mid,nn,i
            *2);

                        }

                        
            else
                        
            {
                            update(l,mid,n,i
            *2);
                            update(mid
            +1,r,n,i*2+1);
                            update(tree[i].l,l
            -1,nn,i*2);
                            update(r
            +1,tree[i].r,nn,i*2+1);
                        }

                        
                    }

                    tree[i].n
            =0;
                }


                
            else if(tree[i].n==0)
                
            {
                    
            if(l!=tree[i].l||r!=tree[i].r)
                    
            {
                        
            int mid=(tree[i].l+tree[i].r)>>1;
                        
            if(r<=mid)
                            update(l,r,n,i
            *2);
                        
            else if(l>mid)
                            update(l,r,n,i
            *2+1);
                        
            else
                        
            {
                            update(l,mid,n,i
            *2);
                            update(mid
            +1,r,n,i*2+1);
                        }

                    }

                }

            }



            int Que(int l,int r,int i)
            {
                
            int ans=0;
                
            if(tree[i].l==l&&tree[i].r==r&&tree[i].n!=0)
                
            {
                    ans
            =(r-l+1)*tree[i].n;
                    
            return ans;
                }

                
            else
                
            {
                    
            int mid=(tree[i].l+tree[i].r)>>1;
                    
            if(r<=mid)
                        ans
            = Que(l,r,i*2);
                    
            else if(l>mid)
                        ans
            = Que(l,r,i*2+1);
                    
            else
                         ans
            =Que(l,mid,i*2)+Que(mid+1,r,i*2+1);
                    
            return ans;
                }

            }




            int main()
            {
                
            int ca;
                scanf(
            "%d",&ca);
                
            int t=0;
                
            while(ca--)
                
            {
                    t
            ++;

                    
            int n;
                    scanf(
            "%d",&n);
                    build(
            1,n,1);
                    tree[
            1].n=1;
                    
            int q;
                    scanf(
            "%d",&q);
                    
            int i;
                    
            for(i=1;i<=q;i++)
                    
            {
                        
            int a,b,c;
                        scanf(
            "%d%d%d",&a,&b,&c);
                        update(a,b,c,
            1);
                    }

                    printf(
            "Case %d: The total value of the hook is %d.\n",t,Que(1,n,1));
                }

                
            return 0;
            }

            發(fā)現(xiàn)我現(xiàn)場寫線段樹的能力太差,以后這種東西一定要能夠手寫,這題要好好總結(jié)一下。恩。東西學(xué)的多了,不一定是好事,對(duì)于靈活的東西一定要做到非常熟練,否則比賽的時(shí)候會(huì)很慢的。
            #include<iostream>
            using namespace std;
            int const maxn=100100;

            struct node
            {
                
            int n;
                
            int l,r;
            }
            tree[maxn*4];

            void build(int l,int r,int i)
            {
                tree[i].l
            =l;
                tree[i].r
            =r;
                tree[i].n
            =1;
                
            if(l==r)
                    
            return;

                
            int mid=(l+r)>>1;
                build(l,mid,i
            *2);
                build(mid
            +1,r,i*2+1);
            }


            void update(int l,int r,int n,int i)
            {
                
            int nn=tree[i].n;
                
            if(l==tree[i].l&&r==tree[i].r)
                
            {
                    tree[i].n
            =n;
                    
            return ;
                }

                
            if(tree[i].n!=0)
                
            {
                    tree[i
            *2].n=tree[i].n;
                    tree[i
            *2+1].n=tree[i].n;
                    tree[i].n
            =0;
                }

                
            int mid=(tree[i].l+tree[i].r)>>1;
                
            {
                    
            if(r<=mid)
                        update(l,r,n,i
            *2);
                    
            else if(l>mid)
                        update(l,r,n,i
            *2+1);
                    
            else
                    
            {
                        update(l,mid,n,i
            *2);
                        update(mid
            +1,r,n,i*2+1);
                    }

                }

                
            }



            int Que(int l,int r,int i)
            {
                
            int ans=0;
                
            if(tree[i].l==l&&tree[i].r==r&&tree[i].n!=0)
                
            {
                    ans
            =(r-l+1)*tree[i].n;
                    
            return ans;
                }

                
            else
                
            {
                    
            int mid=(tree[i].l+tree[i].r)>>1;
                    
            if(r<=mid)
                        ans
            = Que(l,r,i*2);
                    
            else if(l>mid)
                        ans
            = Que(l,r,i*2+1);
                    
            else
                        ans
            =Que(l,mid,i*2)+Que(mid+1,r,i*2+1);
                    
            return ans;
                }

            }




            int main()
            {
                
            int ca;
                scanf(
            "%d",&ca);
                
            int t=0;
                
            while(ca--)
                
            {
                    t
            ++;

                    
            int n;
                    scanf(
            "%d",&n);
                    build(
            1,n,1);
                    tree[
            1].n=1;
                    
            int q;
                    scanf(
            "%d",&q);
                    
            int i;
                    
            for(i=1;i<=q;i++)
                    
            {
                        
            int a,b,c;
                        scanf(
            "%d%d%d",&a,&b,&c);
                        update(a,b,c,
            1);
                    }

                    printf(
            "Case %d: The total value of the hook is %d.\n",t,Que(1,n,1));
                }

                
            return 0;
            }

            posted on 2010-07-17 11:42 abilitytao 閱讀(265) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久人人爽爽爽人久久久| 7777精品久久久大香线蕉| 国产精品久久久久久久午夜片| 久久中文字幕一区二区| 久久成人永久免费播放| 思思久久好好热精品国产| 一本色综合网久久| 国产亚洲综合久久系列| 国产巨作麻豆欧美亚洲综合久久| 亚洲人成无码久久电影网站| 午夜精品久久久久久99热| 香蕉久久夜色精品国产小说| 无码8090精品久久一区| 久久人人爽人人爽人人片av高请| 99精品伊人久久久大香线蕉| 久久香综合精品久久伊人| 99久久精品影院老鸭窝| 久久久久无码专区亚洲av| 狠狠色噜噜色狠狠狠综合久久| 国产精品美女久久久| 久久国产精品波多野结衣AV| 久久精品国产2020| 亚洲国产精品久久66| 久久久SS麻豆欧美国产日韩| 国产精品美女久久久久AV福利| 亚洲国产精品高清久久久| 国産精品久久久久久久| 久久香综合精品久久伊人| 久久久精品久久久久久 | AV无码久久久久不卡网站下载| 久久久久久久综合日本| 国产精品美女久久久久 | 伊人丁香狠狠色综合久久| 久久久久亚洲AV无码观看| 久久本道久久综合伊人| 国内精品久久人妻互换| 中文字幕乱码久久午夜| 久久无码一区二区三区少妇| 91久久精品国产成人久久| 久久久久免费看成人影片| 久久精品国产男包|