POJ 2828 Buy Tickets | 线段树的喵用
题意:
给你n次插队操作,每次两个数,pos,w,意为在pos后插入一个权值为w的数;
最后输出1~n的权值
题解:
首先可以发现,最后一次插入的位置是准确的位置
所以这个就变成了若干个子问题,
所以用线段树维护一下每个区间剩余多少位置可选
对于一个pos
如果左儿子的剩余超过当前位置,就递归进左子树
反之就相当于留出了左儿子剩余的位置,递归进右子树,当前位置变成pos-左儿子剩余位置
请注意是在后面插入
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 typedef long long ll; 5 #define N 200010 6 using namespace std; 7 struct node 8 { 9 ll l,r,sum,w; 10 }t[4*N]; 11 ll p[N],w[N]; 12 ll read() 13 { 14 ll ret=0,neg=1; 15 char j=getchar(); 16 for (;j>'9' || j<'0';j=getchar()) 17 if (j=='-') neg=-1; 18 for (;j<='9' && j>='0';j=getchar()) 19 ret=ret*10+j-'0'; 20 return ret*neg; 21 } 22 ll n,q,l,r,k,ans[N]; 23 void pushup(ll p) 24 { 25 t[p].sum=t[2*p].sum+t[2*p+1].sum; 26 } 27 void build(ll p,ll l,ll r) 28 { 29 t[p].l=l,t[p].r=r; 30 if (l!=r) 31 { 32 ll mid=l+r>>1; 33 build(2*p,l,mid); 34 build(2*p+1,mid+1,r); 35 pushup(p); 36 } 37 else 38 t[p].sum=1; 39 } 40 void modify(ll p,ll pos,ll k) 41 { 42 if (t[p].l==t[p].r) 43 { 44 ans[t[p].l]=k; 45 t[p].sum--; 46 return ; 47 } 48 if (t[2*p].sum>=pos) modify(2*p,pos,k); 49 else modify(2*p+1,pos-t[2*p].sum,k); 50 pushup(p); 51 } 52 int main() 53 { 54 while (scanf("%lld",&n)!=EOF) 55 { 56 build(1,1,n); 57 for (int i=1;i<=n;i++) 58 p[i]=read(),w[i]=read(); 59 for (int i=n;i>=1;i--) 60 modify(1,p[i]+1,w[i]); 61 for (int i=1;i<=n;i++) 62 printf("%lld%c",ans[i]," \n"[i==n]); 63 } 64 return 0; 65 }
转载于:https://www.cnblogs.com/mrsheep/p/7866681.html
POJ 2828 Buy Tickets | 线段树的喵用相关推荐
- POJ 2828 Buy Tickets 线段树
题目: http://poj.org/problem?id=2828 很巧妙的题,逆序插入线段树,这样元素不用移动.用二叉排序树也能过. 1 #include <stdio.h> 2 #i ...
- POJ - 2828 Buy Tickets(线段树+思维/Splay+模拟)
题目链接:点击查看 题目大意:给出n个人,一个队列,一开始队列是空的,每个人加入的时候都会插入到指定位置pos的后面,即插队,问最后队列的排列情况是怎么样的 题目分析:一开始很难想到是线段树的题目,毕 ...
- poj 2828 Buy Tickets
http://poj.org/problem?id=2828 题意:在一个队列里,有人依次向第pos个位置插入,求最后的序列: 思路:用线段树存储区间内剩余的没有被占的位置,注意插入的时候要从后向前插 ...
- #树状数组#poj 2828 Buy Tickets
题目 输入插队的人和插队的位置,求最终所有人的位置. 分析 树状数组,从后往前(倒推),然后就是要让在前面的次序-1. 代码 #include <cstdio> #include < ...
- POJ 2828. Buy Tickets
链接 http://poj.org/problem?id=2828 题意 有 NNN 个人排队,每一个人都有一个权值 valvalval ,每一个人都会按顺序插入到当前队伍的某一个位置 posposp ...
- 【POJ】2828 Buy Tickets(线段树+特殊的技巧/splay)
http://poj.org/problem?id=2828 一开始敲了个splay,直接模拟. tle了.. 常数太大.. 好吧,说是用线段树.. 而且思想很拽.. (貌似很久以前写过貌似的,,) ...
- POJ 3667 Hotel(线段树)
POJ 3667 Hotel 题目链接 题意:有n个房间,如今有两个操作 1.找到连续长度a的空房间.入住,要尽量靠左边,假设有输出最左边的房间标号,假设没有输出0 2.清空[a, a + b - 1 ...
- poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...
- poj/OpenJ_Bailian - 2528 离散化+线段树
传送门:http://bailian.openjudge.cn/practice/2528?lang=en_US //http://poj.org/problem?id=2528 题意: 给你n长海报 ...
最新文章
- python小游戏代码大全-python小游戏实现代码
- Computer Organization and Design--计组作业习题(1)
- 松下SW-9585-C全功能DVD刻录机 狂降100+享受专业刻录!
- jms message组成和jsm selector详解(二)
- Java的代码书写规范
- 如果你人生的第一目标是赚钱
- SQL Server 2008数据库快照技术(八)
- Servlet教程第4讲笔记
- JS动态添加Html
- 电子工程师12个忠告,新手老鸟都值得一看!
- docker 中使用nginx容器无法正常启动,报错signal process started和kili(3255,1) failed (3: No such process)
- 判断一个数是否为完全数
- android 您的手机上未安装应用程序的解决方法
- React部署到 Tomcat上 使用 BrowserRouter不能刷新404的问题
- 08年底杭州东站买票记
- CAD主流电气原理图,通俗易懂,合适工控爱好者学习
- PHP语言:微信开放平台PC端扫码登录
- java二次开发流程,源码修改流程(Hadoop)
- dfss覆盖度的特围
- ION-DTN设计约束
热门文章
- IDP申请直到软件上架流程 - iOS
- cocos2d-x android 移植 问题
- 那些值得回味的MySQL的基础知识
- 一个mongosee例子
- SetGet and MACRO
- TWAIN Specification Chapter 4 “Advanced Application Implementation”译——应用程序端的高级实现...
- 编译Linux Kernel(linux-4.19.178)并制作成rpm文件
- c# typescript_在任何IDE中从C#,Java或Python代码获取TypeScript接口的简单方法
- 企业不要求工程师资格认证_谁说工程师不能成为企业家?
- android surface 平板,Surface平板能升级安卓4.0吗