poj中的一些线段树
poj2828
链接:http://poj.org/problem?id=2828
题解:
初始状态
首先是插入3 69
1,4结点有4个位置,
1,2结点有2个位置,小于3,因此放到1,4结点右孩子,且1,4结点空位置减1
到了1,4右孩子后,只要找到第3-2=1个位置即可,而3,4结点的左孩子3,3含有1个空位置,1>=1,所以放到3,3位置了。
插入2 33
★关键是这里如何处理★
插入2 51
此时1,4的左孩子只有1个位置,1<2,所以只能放到1,4的右孩子3,4上
3,4的左孩子有0个位置,所以只能放在3,4的右孩子4,4上。
插入1 77
- #include<iostream>
- #include<cstdio>
- #define lson l,m,rt<<1
- #define rson m+1,r,rt<<1|1
- using namespace std;
- const int maxn=200001;
- int sum[maxn<<2];
- int pos[maxn],val[maxn],seq[maxn];
- int id;
- void build(int l,int r,int rt) //建树过程,跟节点为其整个区间的长度
- {
- sum[rt]=r-l+1;
- if(l==r)
- return;
- int m=(l+r)/2;
- build(lson);
- build(rson);
- }
- void update(int p,int l,int r,int rt) //更新过程
- {
- sum[rt]--;
- if(l==r)
- {
- id=l;
- return;
- }
- int m=(l+r)/2;
- if(sum[rt<<1]>=p)
- update(p,lson);
- else
- {
- p-=sum[rt<<1];
- update(p,rson);
- }
- }
- int main()
- {
- int n;
- while(scanf("%d",&n)!=EOF)
- {
- build(1,n,1);
- for(int i=1;i<=n;i++)
- scanf("%d%d",&pos[i],&val[i]);
- for(int i=n;i>=1;i--) //从最后一步操作开始往上进行
- {
- update(pos[i]+1,1,n,1);
- seq[id]=val[i];
- }
- printf("%d",seq[1]);
- for(int i=2;i<=n;i++)
- printf(" %d",seq[i]);
- printf("\n");
- }
- return 0;
- }
poj中的一些线段树的更多相关文章
- HDU 1828 / POJ 1177 Picture (线段树扫描线,求矩阵并的周长,经典题)
做这道题之前,建议先做POJ 1151 Atlantis,经典的扫描线求矩阵的面积并 参考连接: http://www.cnblogs.com/scau20110726/archive/2013/0 ...
- poj 2828 Buy Tickets (线段树(排队插入后输出序列))
http://poj.org/problem?id=2828 Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissio ...
- poj 3264 Balanced Lineup(线段树、RMQ)
题目链接: http://poj.org/problem?id=3264 思路分析: 典型的区间统计问题,要求求出某段区间中的极值,可以使用线段树求解. 在线段树结点中存储区间中的最小值与最大值:查询 ...
- poj 2777 Count Color(线段树区区+染色问题)
题目链接: poj 2777 Count Color 题目大意: 给出一块长度为n的板,区间范围[1,n],和m种染料 k次操作,C a b c 把区间[a,b]涂为c色,P a b 查 ...
- POJ 3264 Balanced Lineup 线段树RMQ
http://poj.org/problem?id=3264 题目大意: 给定N个数,还有Q个询问,求每个询问中给定的区间[a,b]中最大值和最小值之差. 思路: 依旧是线段树水题~ #include ...
- POJ 2823 Sliding Window 线段树
http://poj.org/problem?id=2823 出太阳啦~^ ^被子拿去晒了~晚上还要数学建模,刚才躺在床上休息一下就睡着了,哼,还好我强大,没有感冒. 话说今年校运会怎么没下雨!!!说 ...
- POJ 3667 Hotel (线段树区间合并)
题目链接:http://poj.org/problem?id=3667 题目大意:一共有n个房间,初始时都是空的,现在有m个操作,操作有以下两种: 1.1 d :询问是否有连续d个空的房间,若有则输出 ...
- POJ 2991–Crane【线段树+几何】
题意: 把手臂都各自看成一个向量,则机械手的位置正好是手臂向量之和.旋转某个关节,其实就是把关节到机械手之间的手臂向量统统旋转. 由于手臂很多,要每个向量做相同的旋转操作很费时间.这时就可以想到用线段 ...
- POJ 1542 Atlantis(线段树 面积 并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1542 参考网址:http://blog.csdn.net/sunmenggmail/article/d ...
随机推荐
- NYOJ595乱七八糟好坑的水题~~
乱七八糟 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 一天,PIAOYI查看班级成绩时发现各种乱七八糟的数据,有点晕--但是他现在非常想知道排名情况,你能帮帮他吗?为 ...
- Eval 和 Bind 的区别
原文发布时间为:2008-10-20 -- 来源于本人的百度文章 [由搬家工具导入] 据绑定表达式包含在 <%# 和 %> 分隔符之内,并使用 Eval 和 Bind 函数。 Eval 函 ...
- windows 下安装Apache httpd 只需三步
1.下载 Apache 官网地址:http://httpd.apache.org/docs/current/platform/windows.html#down 找到这个, 看到这几个选项: Apac ...
- Git学习之常见错误 git push 失败
Git学习之常见错误 git push 失败 问题描述: git push Counting objects: , done. Delta compression using up to thread ...
- SQL SERVER 2012 第四章 连接 JOIN语句的早期语法结构 & 联合UNION
1/内部连接的早期语法结构 INNER JOIN SELECT * FROM Person.Person JOIN HumanResources.Employee ON Person.Person.I ...
- git批量删除本地分支及远程分支
1.批量删除本地分支 git branch |grep 'branchName' |xargs git branch -D git branch 查看本地分支 | grep 'branchName ...
- java 并发基础,及案例分析
对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了,然而并发问题是令我们大多数程序员头疼的问题,但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们深入研 ...
- java实验(三)——课堂小测
这次的课堂小测是用以前生成的那些四则运算的代码,然后将这些题目写到一个文件中,再通过这个文件读取题目的信息,每读入一个答案的时候,遇到星号的时候,等待用户输入然后判断输入的答案是否正确,然后输出小一道 ...
- LINUX 下 ipv6 socket 编程
大家都知道,随着互联网上主机数量的增多,现有的32位IP地址已经不够用了,所以推出了下一代IP地址IPv6,写网络程序的要稍微改变一下现有的网络程序适应IPv6网络是相当容易的事.对于我们来说就是IP ...
- Java根据百度API获得经纬度,然后根据经纬度在获得城市信息
原文:http://www.open-open.com/code/view/1421032487812 import java.io.BufferedReader; import java.io.IO ...