• <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 閱讀(1427) 評論(0)  編輯 收藏 引用

            久久亚洲国产成人影院网站| 久久国产成人精品麻豆| 日本一区精品久久久久影院| 国产精品岛国久久久久| 国产2021久久精品| 久久人人爽人人爽AV片| 欧美日韩精品久久免费| 亚洲色欲久久久综合网| 亚洲国产成人久久精品动漫| 久久综合精品国产一区二区三区| 久久午夜夜伦鲁鲁片免费无码影视| 久久综合九色综合网站| 国产精品美女久久久m| 国产一区二区精品久久凹凸 | 久久亚洲精精品中文字幕| 7777久久亚洲中文字幕| 久久久精品国产Sm最大网站| 欧美国产成人久久精品| 久久―日本道色综合久久| 久久综合视频网站| 久久精品www人人爽人人| 久久精品成人欧美大片| 久久久久久人妻无码| 久久e热在这里只有国产中文精品99| 久久免费看黄a级毛片| 久久久久国产精品| 99久久精品免费看国产一区二区三区 | 久久国产成人精品麻豆| 久久精品国产99国产精品亚洲| 久久这里只精品国产99热| 亚洲午夜久久久影院| 久久强奷乱码老熟女网站| 久久中文娱乐网| 久久国产精品一国产精品金尊| 国产精品久久久香蕉| 久久一区二区三区免费| 国产综合精品久久亚洲| 中文字幕亚洲综合久久| 亚洲国产精品热久久| 成人亚洲欧美久久久久| 欧美激情精品久久久久|