【插队问题-线段树-思维巧妙】【poj2828】Buy Tickets
可耻的看了题解
巧妙的思维
逆序插入,pos 代表的意义为前面要有pos个空格才OK;
证明:仔细思考一下就觉得是正确的,但是要想到这种方式还是要很聪明,空格是前面的几个数字所形成的,所以要特地留出来,因为这几个空格是既定的事实
线段树实现
线段的意义:当前线段留的空格数,满足区间和性质
代码如下:
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int maxn=222222;
int tree[maxn*4];
int ANS[maxn];
int a[maxn],b[maxn];
int N;
void input()
{
for(int i=1;i<=N;i++) scanf("%d%d",&a[i],&b[i]);
}
void pushup(int rt)
{
tree[rt]=(tree[rt<<1]+tree[rt<<1|1]);
}
int build(int l,int r,int rt)
{
if(l==r) {tree[rt]=1;return 0;}
int m=(l+r)>>1;
build(rson);
build(lson);
pushup(rt);
}
int updata(int p,int k,int l,int r,int rt)//单点更新
{
int m,ok=0;
if(l==r) {tree[rt]=0;ANS[l]=k;return 1;}
m=(l+r)>>1;
if(p<tree[rt<<1]) updata(p,k,lson);
else updata(p-tree[rt<<1],k,rson);
pushup(rt);
return ok;
}
void solve()
{
for(int i=N;i>=1;i--)
{
updata(a[i],b[i],1,N,1);
}
for(int i=1;i<=N;i++)
{
printf("%d",ANS[i]);
if(i!=N) printf(" ");
}
printf("\n");
}
void init()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
}
int main()
{
// init();
while(scanf("%d",&N)!=EOF)
{
build(1,N,1);
input();
solve();
}
return 0;
}
【插队问题-线段树-思维巧妙】【poj2828】Buy Tickets的更多相关文章
- [POJ2828] Buy Tickets(待续)
[POJ2828] Buy Tickets(待续) 题目大意:多组测试,每组给出\(n\)条信息\((a,b)\),表示\(b\)前面有\(a\)个人,顺序靠后的信息优先级高 Solution.1 由 ...
- POJ2828 Buy Tickets(线段树之插队问题)
飞翔 问题是这样的:现在有n个人要买票,但是天黑可以随便插队.依次给出将要买票的n个人的数据信息.包含两项:pos,当前第i号人来了之后他肯定要插入到pos这个位置,如果当前pos无人,那最好了,直接 ...
- poj2828 Buy Tickets (线段树 插队问题)
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 22097 Accepted: 10834 Des ...
- poj-2828 Buy Tickets(线段树,排队问题,逆向思维)
题目地址:POJ 2828 Buy Tickets Description Railway tickets were difficult to buy around the Lunar New Yea ...
- [poj2828] Buy Tickets (线段树)
线段树 Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must ...
- POJ2828 Buy Tickets 【线段树】+【单点更新】+【逆序】
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 12296 Accepted: 6071 Desc ...
- poj-2828 Buy Tickets(经典线段树)
/* Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 10207 Accepted: 4919 Descr ...
- poj-----(2828)Buy Tickets(线段树单点更新)
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 12930 Accepted: 6412 Desc ...
- POJ2828 Buy Tickets [树状数组,二分答案]
题目传送门 Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 22611 Accepted: 110 ...
随机推荐
- uva540 Team Queue by sixleaves
这道题目.主要是对队列的灵活应用.其实就是一道模拟题目,只要你洞察出题目的本质就十分简单.题目意思大体是有多组测试数据,每组的一开始是一个数字t,代表一共有多少的团队,接着是t行输入,每一行都由一个数 ...
- 新浪系统工程师笔试--shell
1. test01 test02 1 200 1 100 2 500 2 300 3 200 3 50 4 100 4 150 输出 200 100 100 500 300 ...
- Swift版音乐播放器(简化版),swift音乐播放器
这几天闲着也是闲着,学习一下Swift的,于是到开源社区Download了个OC版的音乐播放器,练练手,在这里发扬开源精神, 希望对大家有帮助! 这个DEMO里,使用到了 AudioPlayer(对音 ...
- C# 设计模式 - 单例模式 演示
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- javascript 【封装AJAX】
post function createXHR() { if (typeof XMLHttpRequest != 'undefined') { return new XMLHttpRequest(); ...
- 样式布局分享-基于frozen.js的移动OA
最近改造了公司移动OA的样式,改善了显示效果和用户体验,其中用到了腾讯的 frozen.js 框架,在此把布局代码分享给大家,希望大家可以用得上,具体效果如下图. Demo 百度网盘 下载地址 Git ...
- JQ第一篇
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 搭建SSH环境之添加所需jar包
一.首先介绍要添加框架环境: JUnit Struts2 Hibernate Spring (1)配置JUnit /**-------------------------添加JUnit-------- ...
- MFC对话框中解决回车键、ESC键退出的方法
BOOL CYourDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->message==WM_KEYDOWN&&pMsg->wP ...
- Binder连接池
一.为什么需要Binder线程池 产生原因:因为当有多个不同的业务块都要使用AIDL来进行通信,则需要创建多个Service,每创建一个Service就需要消耗系统资源. 解决思路:将所有的AIDL放 ...