• <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

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

            HDOJ 1698 Just a Hook 線段樹

            題目的意思是給你一個數(shù)組,大小是N,初始的時候,a[1-N]均為1,然后有Q個操作,每次操作修改某個區(qū)間中的值,求最后整個區(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)場寫線段樹的能力太差,以后這種東西一定要能夠手寫,這題要好好總結一下。恩。東西學的多了,不一定是好事,對于靈活的東西一定要做到非常熟練,否則比賽的時候會很慢的。
            #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 閱讀(274) 評論(0)  編輯 收藏 引用

            久久久精品人妻一区二区三区蜜桃| 精品久久一区二区| 色综合久久久久综合99| 亚洲国产另类久久久精品黑人 | 久久久久亚洲AV无码观看 | 久久无码专区国产精品发布| 亚洲精品无码久久久久去q| 久久九九亚洲精品| 色综合久久夜色精品国产| 国产成人久久激情91| 亚洲国产成人精品久久久国产成人一区二区三区综 | 麻豆精品久久精品色综合| 思思久久好好热精品国产| 久久综合欧美成人| 久久综合给久久狠狠97色| 国产成人精品久久综合| 99久久无色码中文字幕人妻| 久久国产视频99电影| 久久精品一区二区| 精品久久久久中文字幕日本| 色综合合久久天天给综看| 国产亚洲色婷婷久久99精品91| 亚洲αv久久久噜噜噜噜噜| 久久人搡人人玩人妻精品首页| 人妻少妇久久中文字幕一区二区| 欧美亚洲日本久久精品| 久久夜色精品国产| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区| 伊人久久久AV老熟妇色| 国产成人综合久久精品红| 免费一级做a爰片久久毛片潮 | 久久中文骚妇内射| 人妻无码久久一区二区三区免费| 精品熟女少妇AV免费久久| 2021最新久久久视精品爱| 色妞色综合久久夜夜| 久久精品极品盛宴观看| 久久综合鬼色88久久精品综合自在自线噜噜 | 国产精品亚洲综合专区片高清久久久| 99久久无码一区人妻a黑| 久久久国产精品福利免费|