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

            久久亚洲美女精品国产精品| 女同久久| 亚洲中文字幕久久精品无码喷水| 999久久久免费国产精品播放| 久久er99热精品一区二区| 久久亚洲AV成人无码电影| 伊人久久无码中文字幕| 亚洲国产精品无码成人片久久| 久久久久亚洲AV无码观看| 亚洲伊人久久综合中文成人网| 色婷婷综合久久久久中文字幕 | 色8久久人人97超碰香蕉987| 伊人久久久AV老熟妇色| 色妞色综合久久夜夜| 国产精品一久久香蕉国产线看观看 | 久久人人爽人人爽人人爽| 久久婷婷色香五月综合激情| 久久精品国产亚洲av麻豆图片| 亚洲国产另类久久久精品| 久久99精品综合国产首页| 国产亚洲精久久久久久无码AV| 久久亚洲精品无码播放| 亚洲国产精品高清久久久| 国产精品久久久久久福利漫画| 精品久久久久久无码国产| 久久青青草视频| 久久A级毛片免费观看| 人人狠狠综合久久亚洲高清| 日产精品久久久一区二区| 伊人久久综在合线亚洲2019| 伊人色综合久久天天网| 东京热TOKYO综合久久精品| 久久精品无码av| 久久久久AV综合网成人| 性高朝久久久久久久久久| 精品久久久久久亚洲精品| 亚洲国产成人精品女人久久久| 久久66热人妻偷产精品9| 无码8090精品久久一区| 国产精品久久久久影视不卡| 久久久久亚洲精品日久生情|