poj 2828 Buy Tickets 线段树!!!

来源:互联网 发布:多分类roc曲线 python 编辑:程序博客网 时间:2024/05/17 04:06
只要理解 用线段记录这个区间有多少个空位就行啦!!然后根据左右孩子的空位数 进行遍历线段树
#include<iostream>#include<stdio.h>using namespace std;struct node{    int l,r,s;}a[1000000];int b[200005],val[200005],ans[200005];void build(int i,int left,int right){    a[i].l=left;    a[i].r=right;    a[i].s=(right-left+1);    if(a[i].l==a[i].r)    return ;    int mid=(left+right)>>1;    build(i*2,left,mid);    build(i*2+1,mid+1,right);}void updata(int i,int sum,int big){    a[i].s--;    if(a[i].l==a[i].r)    {        ans[a[i].l]=big;        return;    }    if(a[i*2].s>=sum)    updata(i*2,sum,big);    else    updata(i*2+1,sum-a[i*2].s,big);}int main(){    int n;    while(~scanf("%d",&n))    {        build(1,1,n);        for(int i=1;i<=n;i++) scanf("%d%d",&b[i],&val[i]);        for(int i=n;i>=1;i--) updata(1,b[i]+1,val[i]);        for(int i=1;i<=n-1;i++) printf("%d ",ans[i]);        printf("%d\n",ans[n]);    }    return 0;}

原创粉丝点击