POJ 2182&& POJ 2828:Lost Cows 从后往前 线段树
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 10544 | Accepted: 6754 |
Description
not line up in the required ascending numerical order of their brands.
Regrettably, FJ does not have a way to sort them. Furthermore, he's not very good at observing problems. Instead of writing down each cow's brand, he determined a rather silly statistic: For each cow in line, he knows the number of cows that precede that cow
in line that do, in fact, have smaller brands than that cow.
Given this data, tell FJ the exact ordering of the cows.
Input
* Lines 2..N: These N-1 lines describe the number of cows that precede a given cow in line and have brands smaller than that cow. Of course, no cows precede the first cow in line, so she is not listed. Line 2 of the input describes the number of preceding cows
whose brands are smaller than the cow in slot #2; line 3 describes the number of preceding cows whose brands are smaller than the cow in slot #3; and so on.
Output
Sample Input
5
1
2
1
0
Sample Output
2
4
5
3
1
有N头牛站成一列,每头牛只能看见自己前面比自己brand小的牛,这个数量给你了。问你每头牛的brand分别是多少。
就是查空位数量,如果有空位被占了,那么就往后面延。。。
只不过用了线段树的形式,以线段树的形式来找空位。len代表空位的数量。
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; struct no
{
int L,R;
int len;
}tree[32005]; void buildtree(int root,int L,int R)
{
tree[root].L=L;
tree[root].R=R; tree[root].len = R-L+1; if(L!=R)
{
int mid = (L+R)>>1;
buildtree((root<<1)+1,L,mid);
buildtree((root<<1)+2,mid+1,R);
}
} int query(int root,int num)
{
tree[root].len--;
if(tree[root].L==tree[root].R)
{
return tree[root].L;
}
if(tree[(root<<1)+1].len >= num)
{
return query((root<<1)+1,num);
}
else
{
return query((root<<1)+2,num-tree[(root<<1)+1].len);
}
} int n;
int val[8005];
int ans[8005]; int main()
{
int i;
while(scanf("%d",&n)!=EOF)
{
buildtree(0,1,n);
val[1]=0; for(i=2;i<=n;i++)
{
scanf("%d",val+i);
}
for(i=n;i>=1;i--)
{
ans[i]=query(0,val[i]+1);
}
for(i=1;i<=n;i++)
{
printf("%d\n",ans[i]);
}
}
return 0;
}
POJ2828是它的姐妹题,买一送一。
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; struct no
{
int L,R;
int len;
}tree[800005]; int n;
int val[200005];
int pos[200005];
int cnt[200005]; void buildtree(int root,int L,int R)
{
tree[root].L=L;
tree[root].R=R; tree[root].len = R-L+1; if(L!=R)
{
int mid = (L+R)>>1;
buildtree((root<<1)+1,L,mid);
buildtree((root<<1)+2,mid+1,R);
}
} void query(int root,int num,int val)
{
tree[root].len--;
if(tree[root].L==tree[root].R)
{
cnt[tree[root].L]=val;
return;
}
if(tree[(root<<1)+1].len >= num)
{
query((root<<1)+1,num,val);
}
else
{
query((root<<1)+2,num-tree[(root<<1)+1].len,val);
}
} int main()
{
int i;
while(scanf("%d",&n)!=EOF)
{
buildtree(0,1,n); for(i=1;i<=n;i++)
{
scanf("%d%d",pos+i,val+i);
}
for(i=n;i>=1;i--)
{
query(0,pos[i]+1,val[i]);
}
for(i=1;i<=n;i++)
{
if(i==1)
printf("%d",cnt[i]);
else
printf(" %d",cnt[i]);
}
printf("\n");
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 2182&& POJ 2828:Lost Cows 从后往前 线段树的更多相关文章
- POJ 2182 / HDU 2711 Lost Cows(平衡树)
Description N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular di ...
- POJ 2182 Lost Cows(牛排序,线段树)
Language: Default Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9207 Acce ...
- poj 2482 Stars in Your Window + 51Nod1208(扫描线+离散化+线段树)
Stars in Your Window Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13196 Accepted: ...
- POJ 3162 Walking Race(树形dp+单调队列 or 线段树)
http://poj.org/problem?id=3162 题意:一棵n个节点的树.有一个屌丝爱跑步,跑n天,第i天从第i个节点开始跑步,每次跑到距第i个节点最远的那个节点(产生了n个距离),现在要 ...
- POJ 2886 Who Gets the Most Candies?(反素数+线段树)
点我看题目 题意 :n个小盆友从1到n编号按顺时针编号,然后从第k个开始出圈,他出去之后如果他手里的牌是x,如果x是正数,那下一个出圈的左手第x个,如果x是负数,那出圈的是右手第-x个,游戏中第p个离 ...
- POJ 2299 Ultra-QuickSort(线段树+离散化)
题目地址:POJ 2299 这题以前用归并排序做过.线段树加上离散化也能够做.一般线段树的话会超时. 这题的数字最大到10^10次方,显然太大,可是能够利用下标,下标总共仅仅有50w.能够从数字大的開 ...
- POJ 2352 Stars(线段树)
题目地址:id=2352">POJ 2352 今天的周赛被虐了. . TAT..线段树太渣了..得好好补补了(尽管是从昨天才開始学的..不能算补...) 这题还是非常easy的..维护 ...
- poj 3468 A Simple Problem with Integers(原来是一道简单的线段树区间修改用来练练splay)
题目链接:http://poj.org/problem?id=3468 题解:splay功能比线段树强大当然代价就是有些操作比线段树慢,这题用splay实现的比线段树慢上一倍.线段树用lazy标记差不 ...
- POJ 1151 / HDU 1542 Atlantis 线段树求矩形面积并
题意:给出矩形两对角点坐标,求矩形面积并. 解法:线段树+离散化. 每加入一个矩形,将两个y值加入yy数组以待离散化,将左边界cover值置为1,右边界置为2,离散后建立的线段树其实是以y值建的树,线 ...
随机推荐
- C++ 标准模板库STL 队列 queue 使用方法与应用介绍
C++ 标准模板库STL 队列 queue 使用方法与应用介绍 queue queue模板类的定义在<queue>头文件中. 与stack模板类很相似,queue模板类也需要两个模板参数, ...
- pycharm连接mysql数据库的时区问题.
登录到mysql的控制台, 执行: set global time_zone='+8:00'; 这设置的是全局时区,重启后失效. 自MySQL 8.0 GA版本开始支持将参数写入并且持久化: set ...
- Logback的AsyncAppender与RollingFileAppender流程解析
近期工作中涉及到文件记录.文件翻转等操作,思考有没有成熟的代码以便参考. 因此,第一时间就联想到Logback的AsyncAppender以及RollingFileAppender. AsyncApp ...
- python中单下划线的变量
1._xxx 不能用于’from module import *’ 以单下划线开头的表示的是protected类型的变量.即保护类型只能允许其本身与子类进行访问.2.__xxx 双下划线的表示的是私有 ...
- Windows Mysql Server重启, log-bin路径配置
Windows Mysql Server重启, log-bin路径配置 分类: mysql数据库2014-03-16 14:49 1313人阅读 评论(0) 收藏 举报 Mysqlmysql serv ...
- elk基本配置
https://www.cnblogs.com/zsl-find/articles/10730458.html https://www.cnblogs.com/mylovelulu/p/1053000 ...
- SciPy k均值聚类
章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...
- 设备树DTS 学习:Linux DTS文件加载过程
背景 了解机制有利于对内核有更深的认识. wget https://mirrors.aliyun.com/linux-kernel/v3.x/linux-3.2.61.tar.xz 内核 在drive ...
- 关于Orcale 11g 安装过程
1.前往Oracle官网下载相应安装包 https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.h ...
- VUE - 取消默认事件
1,在 methods 中 <template> <div> <form @submit="addTodo"> ...