poj 2828 线段树(单点更新,逆序插入)
来源:互联网 发布:recyclerview清空数据 编辑:程序博客网 时间:2024/06/14 22:31
点击打开链接
#include <iostream>#include <cstring>#include <algorithm>#include <cstdio> using namespace std;const int M=200005;int seg[M<<2];//存区间的空位置数 int ans[M];//记录最终位置 void Push_Up(int rt){seg[rt]=seg[rt<<1]+seg[rt<<1|1];}void build(int l,int r,int rt){if(l==r){seg[rt]=1;return;}int m=(l+r)>>1;build(l,m,rt<<1);build(m+1,r,rt<<1|1);Push_Up(rt);//左右儿子建完后 更新父节点 }void update(int p,int v,int l,int r,int rt){if(l==r){ans[l]=v;seg[rt]=0;return;}int m=(l+r)>>1;if(seg[rt<<1]>=p){update(p,v,l,m,rt<<1);}else{update(p-seg[rt<<1],v,m+1,r,rt<<1|1);//p:整个线段的第p个空位 }Push_Up(rt);}int main(){int p[M],v[M];int n;while(cin>>n){build(1,n,1);for(int i=1;i<=n;i++){scanf("%d%d",&p[i],&v[i]);}for(int i=n;i>=1;i--)//思路:最后一个人插入的位置后,该位置固定,所以则从后往前推出答案 ,pos为整个线段的第pos个空位 {update(p[i]+1,v[i],1,n,1);//pos可以看做整个线段的第pos个空位 //则pos要么等于p(p为空时) 要么在大于p(p有人则往后走) }for(int i=1;i<=n;i++){cout<<ans[i]<<" ";}cout<<endl;}return 0;}
0 0
- poj 2828 线段树(单点更新,逆序插入)
- poj 2828 Buy Tickets 【线段树】【逆序插入 + 单点更新 + 区间求和】
- POJ 2828 Buy Tickets【线段树单点更新+逆序遍历】【经典题】【模板题】
- POJ 2828 线段树单点插入
- POJ 2828 逆序插入加线段树
- POJ 2828 线段树 逆序插入
- poj 2828 线段树单点更新
- POJ 2828(线段树 单点更新)
- poj 2828 线段树 单点更新
- POJ 2828 (线段树-单点更新)
- POJ 2828 线段树单点更新
- poj 2828(线段树单点更新)
- poj 2828 线段树+单点更新
- 线段树求逆序数(单点更新)
- poj 2828 buy Tickets 用线段树模拟带插入的队列 单点更新
- POJ 2828 线段树 单点更新,单点查询
- POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)
- poj 2828(线段树:单点插入,区间查询)
- [模板]DFS序的应用-初级
- ImportREC输入表重建工具
- geoip 添加一列,add_field =>["[geoip][request_time]","%{request_time}"]
- Tomcat源码分析(二)--连接处理
- Python-json模块
- poj 2828 线段树(单点更新,逆序插入)
- 169\229- Majority Element
- Linux netstat命令详解
- 开源库由Bilibili
- spring bean中子元素lookup-method和replaced-method
- Tomcat源码分析(三)--连接器是如何与容器关联的?
- 【学习笔记】<算法导论>基础知识1.1
- BroadcastReceiver使用方式
- HDU1181-变形课