poj2828
来源:互联网 发布:邮箱营销软件 编辑:程序博客网 时间:2024/05/13 14:36
链接:点击打开链接
题意:就是后面人插队的问题,具体如图所示
代码:
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int node[200000*3],ans[200000];int x[200000],y[200000];void build(int pos,int l,int r,int id,int x){ int mid; if(l==r){ node[pos]=1; //初始时最下空格都为1 return; } mid=(l+r)/2; if(id<=mid) build(2*pos,l,mid,id,x); else build(2*pos+1,mid+1,r,id,x); node[pos]=node[2*pos]+node[2*pos+1]; //更新区间中空格数}void question(int pos,int l,int r,int num,int x){ int mid; if(l==r){ ans[l]=x;node[pos]=0; //放入一个数,空格数就清零 return; } mid=(l+r)/2; if(num<=node[2*pos]) question(2*pos,l,mid,num,x); else question(2*pos+1,mid+1,r,num-node[2*pos],x); node[pos]=node[2*pos]+node[2*pos+1]; //向上更新 }int main(){ int i,n; while(scanf("%d",&n)!=EOF){ memset(ans,0,sizeof(ans)); for(i=1;i<=n;i++){ scanf("%d%d",&x[i],&y[i]); build(1,1,n,i,y[i]); } for(i=n;i>=1;i--) //因为后面的数决定了前面 question(1,1,n,x[i]+1,y[i]); //的数的位置,所以从后面更新 for(i=1;i<=n;i++) printf("%d ",ans[i]); printf("\n"); } return 0;}
0 0
- POJ2828
- poj2828
- poj2828
- poj2828
- poj2828
- poj2828
- poj2828
- POJ2828
- poj2828
- poj2828
- poj2828
- poj2828
- POJ2828
- poj2828
- POJ2828 插队
- 【poj2828】无键跳表
- poj2828 买票
- poj2828【线段树】
- cocos2dx-33种场景切换
- PHP执行系统命令简介
- 需要学习的工具推荐,以及我需要具备的知识
- 南邮 OJ 2058 万万没想到(2)
- 构造函数初探
- poj2828
- sql之left join、right join、inner join的区别
- Android菜单menu控件大全
- sublime安装less2css,保存less文件同时生成对应css文件
- 学习 ab 命令的自我总结
- SQL SERVER 2008 R2 数据库下载
- 3279POJ
- app和app后端的通讯
- JSON.stringify可以输出格式化的JSON字符串