• <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)  編輯 收藏 引用

            亚洲精品乱码久久久久久 | 久久午夜免费视频| 四虎影视久久久免费| 久久久久亚洲国产| 久久综合精品国产二区无码| 精品永久久福利一区二区| 久久国产综合精品五月天| 国内精品综合久久久40p| 国内精品久久久久| 久久久久波多野结衣高潮| 久久这里只有精品18| 国产精品永久久久久久久久久| 欧美激情一区二区久久久| 久久发布国产伦子伦精品| 一本久久a久久精品综合香蕉| 久久综合狠狠综合久久综合88| 麻豆久久| 天天久久狠狠色综合| 色综合久久综合中文综合网| 性欧美大战久久久久久久| 日本久久久久久中文字幕| 久久人爽人人爽人人片AV | 久久被窝电影亚洲爽爽爽| 久久婷婷五月综合国产尤物app| 嫩草影院久久国产精品| 99久久无码一区人妻a黑| 久久久久亚洲av综合波多野结衣 | www久久久天天com| 老男人久久青草av高清| 久久人妻少妇嫩草AV无码蜜桃| 国产精品美女久久久| 精品久久久久久亚洲精品| 亚洲午夜无码久久久久| 久久九九久精品国产免费直播| 久久久国产99久久国产一| 日本高清无卡码一区二区久久 | 国产精自产拍久久久久久蜜| 久久亚洲国产午夜精品理论片| 久久丫精品国产亚洲av不卡 | 国产精品久久久久久福利漫画| 久久国产精品77777|