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

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

            POJ 2886 Who Gets the Most Candies? 線段樹,在環中求第k個空閑的位置

            很高興在完全沒有參考任何代碼的前提下通過此題,呵呵,就是代碼比較猥瑣,跑得也比較慢,2700MS,超過時限的一半了。
            此題應該還有繼續提升的空間,我想了想,insert函數和query其實是可以放在一起的。另外網上的方法用了反素數 這樣可以減少插入的次數,應該也能剪去一下時間。下次試試。^_^
            順便用此題做為POJ 500題紀念

            #include<iostream>
            using namespace std;

            int n,k;
            struct person
            {
                
            char s[10];
                
            int p;
            }
            a[500010];
            int dp[500010];

            void init()
            {

                
            int i,j;
                
            for(i=1;i<=500000;i++)
                    
            for(j=1;i*j<=500000;j++)
                        dp[i
            *j]++;
            }


            const int maxn=500010;
            struct node
            {
                
            int l,r;
                
            int cnt;
            }
            tree[maxn*3];

            void build(int k,int l,int r)
            {

                tree[k].l
            =l;tree[k].r=r;
                tree[k].cnt
            =0;
                
            if(l==r) return;
                
            int mid=(l+r)>>1;
                build(k
            *2,l,mid);
                build(k
            *2+1,mid+1,r);
            }


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

            }


            int query(int i,int k)
            {
                
            if(tree[i].cnt==0&&tree[i].r-tree[i].l+1==k)
                    
            return tree[i].r;
                
            int l=tree[i*2].r-tree[i*2].l+1-tree[i*2].cnt;
                
            int r=tree[i*2+1].r-tree[i*2+1].l+1-tree[i*2+1].cnt;
                
            if(k<=l)
                    
            return query(i*2,k);
                
            else
                    
            return query(i*2+1,k-l);
            }


            int query2(int i,int l,int r)
            {

                
            if(tree[i].l==l&&tree[i].r==r)
                    
            return tree[i].r-tree[i].l+1-tree[i].cnt;
                
            int mid=(tree[i].l+tree[i].r)>>1;
                
            int res=0;
                
            if(r<=mid)
                    res
            +=query2(i*2,l,r);
                
            else if(l>mid)
                    res
            +=query2(i*2+1,l,r);
                
            else 
                
            {
                    res
            +=query2(i*2,l,mid);
                    res
            +=query2(i*2+1,mid+1,r);
                }

                
            return res;
            }



            int main()
            {
                
            int i,j;
                init();
                
            int res=dp[1];
                
            int mark=k;
                
            while(scanf("%d%d",&n,&k)!=EOF)
                
            {
                    
            int pos;
                    
            int res=dp[1];
                    
            int mark=k;
                    build(
            1,1,n);
                    
            for(i=1;i<=n;i++)
                        scanf(
            "%s%d",a[i].s,&a[i].p);
                    
            int l,r;
                    
            int t=k;
                    pos
            =k;
                    insert(
            1,k);
                    
            for(i=2;i<=n;i++)
                    
            {
                        t
            =pos;
                        
            if(t>1)l=query2(1,1,t-1);
                        
            else l=0;
                        
            if(t<n)    r=query2(1,t+1,n);
                        
            else r=0;

                        
            if(a[t].p%(l+r)!=0)
                            a[t].p
            %=(l+r);

                        
            else if(a[t].p>0)
                            a[t].p
            =l+r;
                        
            else 
                            a[t].p
            =-(l+r);
                        
            if(a[t].p>0&&a[t].p<=r)
                            pos
            =query(1,l+a[t].p);
                        
            else if(a[t].p<0&&l+a[t].p>=0)
                            pos
            =query(1,l+a[t].p+1);
                        
            else if(a[t].p>0&&a[t].p>r)
                            pos
            =query(1,a[t].p-r);
                        
            else 
                            pos
            =query(1,l+r-abs(l+a[t].p)+1);
                        
            if(res<dp[i])
                        
            {
                            mark
            =pos;
                            res
            =dp[i];
                        }

                        insert(
            1,pos);
                    }

                    printf(
            "%s %d\n",a[mark].s,res);
                }

                
            return 0;
            }

            posted on 2010-04-14 00:41 abilitytao 閱讀(1430) 評論(0)  編輯 收藏 引用

            久久亚洲精品中文字幕| 韩国免费A级毛片久久| 国产精品欧美久久久久天天影视 | 国产精品99久久久久久宅男| 久久香蕉国产线看观看99| 污污内射久久一区二区欧美日韩 | 国产91色综合久久免费分享| 久久无码人妻精品一区二区三区| 久久中文骚妇内射| 国产成人久久久精品二区三区| 日日狠狠久久偷偷色综合0| 麻豆AV一区二区三区久久| 久久久国产一区二区三区| 久久精品国产网红主播| 2021最新久久久视精品爱| 久久综合久久综合久久综合| 久久久久久国产精品美女| 漂亮人妻被黑人久久精品| 香蕉久久AⅤ一区二区三区| aaa级精品久久久国产片| 欧美国产成人久久精品| 日本免费久久久久久久网站| 99久久香蕉国产线看观香| 国产精品欧美久久久久无广告 | 精品熟女少妇AV免费久久| 伊人久久大香线蕉综合5g| 久久伊人精品青青草原日本| 国产精品禁18久久久夂久 | 亚洲欧洲精品成人久久曰影片 | 中文国产成人精品久久亚洲精品AⅤ无码精品| 久久久免费精品re6| 99久久无色码中文字幕人妻| 亚洲AV成人无码久久精品老人| 一本一本久久a久久综合精品蜜桃 一本一道久久综合狠狠老 | 久久久久99精品成人片试看| 中文字幕久久久久人妻| 久久久亚洲裙底偷窥综合| 欧美亚洲国产精品久久| 色偷偷久久一区二区三区| 亚洲精品无码久久久久久| 无码人妻久久一区二区三区免费|