poj_2828线段树,逆序插入
2024-08-31 15:44:26
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int maxn = 200020;
using namespace std;
int p[200020],v[200020];
int sum[maxn<<2];
int ans[maxn];
void build(int l,int r,int rt)
{
sum[rt]=r-l+1;
int m=(r+l)/2;
if(l==r)
return;
build(lson);
build(rson);
}
void update(int v,int p,int l,int r,int rt)
{
sum[rt]--;
int m=(r+l)/2;
if(l==r)
{
ans[l]=v;
return ;
}
if(sum[rt<<1]>=p)
{
update(v,p,lson);
}
else
{
p-=sum[rt<<1];
update(v,p,rson);
}
}
int main()
{
int n;
while(cin>>n)
{
for(int i=0; i<n; i++)
scanf("%d%d",&p[i],&v[i]);
build(1,n,1);
for(int i=n-1; i>=0; i--)
update(v[i],p[i]+1,1,n,1);
cout<<ans[1];
for(int i=2; i<=n; i++)
cout<<" "<<ans[i];
cout<<endl; }
return 0;
}
最新文章
- nginx for linux安装及安装错误解决
- MST之kruskal算法
- c++map的用法 分类: POJ 2015-06-19 18:36 11人阅读 评论(0) 收藏
- objective-c中使用cocoa的NSPredicate,谓词(十四)
- [013]函数重载--int*和void*的匹配优先级
- 函数page_cur_search_with_match
- Linux----mktemp命令的用法
- Java版网络爬虫基础(转)
- windbg指定SOS版本,执行扩展命令报错
- python函数式编程之生成器
- python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法
- linux下 vi命令编辑/etc/my.cnf
- 搭建docker私有仓库
- 后缀字符串|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
- 前端之javascript的DOM对象和标签
- Django组件扩展 总结
- Android failed to start daemon
- UIScrollView 遇到的小坑
- 总结的比较好的OpenGL教程
- 树莓派3b添加python时间同步脚本
热门文章
- 洛谷 P1617 爱与愁的一千个伤心的理由
- HDU 4303 Contest 1
- hdu 3449 Consumer (依赖01背包)
- JDBC创建mysql连接池代码
- 玩转Android Camera开发(三):国内首发---使用GLSurfaceView预览Camera 基础拍照demo
- WebRTC代码走读(八):代码文件夹结构
- JAVA设计模式之【建造者模式】
- iOS对象方法和类方法的区别与调用方式
- [luogu P4197] Peaks 解题报告(在线:kruskal重构树+主席树 离线:主席树+线段树合并)
- .net core @Html 自定义属性中包含特殊符号解决