poj2828—線段樹

來源:互聯網
上載者:User
//題目大意是,有n個人按次序插隊,第i個人會插在第f[i]個位置之後,當然隨著第i+1....n個人的插入,第i個人的位置也會發生改變//那麼我們可以從後往前插,第i個插在第f[i]位置之後,相當於第i個要在其插入的位置之前留f[i]個空位#include <iostream>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define N 200005int n,m,t;struct TNode{    int l,r,snum;} node[4*N];int ix[N],iy[N],ans[N];void build(int root,int l,int r){    node[root].l=l,node[root].r=r;    node[root].snum=r-l+1;    if(l==r) return ;    int mid=(l+r)>>1,p=root<<1;    build(p,l,mid);    build(p+1,mid+1,r);}void insert(int root,int id,int val){    node[root].snum--;    if(node[root].l==node[root].r)    {        ans[node[root].l]=val;        return ;    }    int p=root<<1;    if(node[p].snum>id) insert(p,id,val);    else insert(p+1,id-node[p].snum,val);}int main(){    int id,i,j,k;    while(scanf("%d",&n)!=EOF)    {        build(1,1,n);        for(i=1; i<=n; i++) scanf("%d%d",&ix[i],&iy[i]);        for(i=n; i>0; i--)        {            insert(1,ix[i],iy[i]);        }        for(i=1; i<=n; i++)        {            if(i!=1) printf(" ");            printf("%d",ans[i]);        }        puts("");    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.