POJ 2828

还是弱啊。思维是个好东西。。。

刚开始想来想去用线段树存人的话不仅超时,而且存不下。。。居然是存空位!

sum[]数组存这个序列空位个数,然后逆序遍历。逆序好理解,毕竟最后一个人插进来位置已经可以确定了,前面的位置就根据他来更新。

 #include<iostream>
#include<cstdio>
#define mid int m=(l+r)>>1
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int maxn=;
int sum[maxn<<],ans[maxn<<];
int N,p[maxn],v[maxn]; void Build(int l,int r,int rt)//建树存空位
{
sum[rt]=r-l+;//初始建树时线段对应的空位数就是线段长度(点看成长度为1的线段)
if(l==r) return;
mid;
Build(lson);
Build(rson);
} void PushUp(int rt)
{
sum[rt]=sum[rt<<]+sum[rt<<|];
} void Update(int pos,int val,int l,int r,int rt)
{
if(l==r){
ans[l]=val;//递归到节点,用ans[]数组记录第l个人的val值。
sum[rt]--;//空位数减1
return;
}
mid;
if(pos<=sum[rt<<]) Update(pos,val,lson);//如果当前节点左孩子的空位数足够,就递归左孩子
else Update(pos-sum[rt<<],val,rson);//如果左孩子的空位数不够,那么就递归又孩子,但空位数要变成pos-sum[rt<<1]
PushUp(rt);//向上更新父节点的空位数
} int main()
{
while(scanf("%d",&N)==)
{
Build(,N,);
for (int i=;i<=N;i++) scanf("%d%d",&p[i],&v[i]);
for (int i=N;i>=;i--){
Update(p[i]+,v[i],,N,);//逆序遍历
}
for (int i=;i<N;i++) printf("%d ",ans[i]);
printf("%d\n",ans[N]);
}
return ;
}

poj 2828

最新文章

  1. iOS-Xcode7 网络连接
  2. 重构第29天 去除中间人对象(Remove Middle Man)
  3. [C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例
  4. #Cocos2d+lua#android+Eclipse工程编译设置
  5. C++学习笔记37:元编程
  6. A Tour of Go Arrays
  7. 用XAML做网页!!—广告展示区
  8. 异常:failed for object com.sdu.crm.pojo.Customer@136a986 [java.lang.NullPointerException]
  9. unity3d自带帮助文档的打开方法
  10. Ansible性能调优
  11. java程序调用CMD命令启动tomcat替换环境变量
  12. IIS网站部署后,程序常见错误记录
  13. angular 官网英雄案例 报错整理
  14. Nginx 学习笔记(十)介绍HTTP / 2服务器推送(译)
  15. ADO.NET连接字符串大全
  16. db2 reorg table failed处理
  17. docker图形化管理工具portainer
  18. SpringBoot Logback日志配置
  19. log4j(三)——如何控制不同级别的日志信息的输出?
  20. BZOJ1299 [LLH邀请赛]巧克力棒

热门文章

  1. 如何处理HTML5新标签的浏览器兼容问题?
  2. LUOGU P3708 koishi的数学题
  3. tr的display属性出现td的colspan无效问题
  4. 前端插件--swipe.js
  5. flask的基本操作
  6. 华为RH2288 V3服务器进入BIOS并设置iBMC地址
  7. 2019.8.9 NOIP模拟测试15 反思总结
  8. oracle习题练习-表空间-用户-表-约束
  9. html5的离线存储问题集合
  10. Faster RCNN算法训练代码解析(2)