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值建的树,线 ...
随机推荐
- 解决css中display:inline-block的兼容问题
*display:inline; *zoom:1; 不多说,ie6/7直接在元素添加以上的属性即可.
- java学习-初级入门-面向对象①-面向对象概述-结构化程序设计
为了学习面向对象程序设计,今天我们先利用面向对象以前的知识,设计一个学生类. 要求进行结构化程序设计. 学生类: Student 要求:存储学生的基本信息(姓名.性别.学历层次和年级),实现学生信息的 ...
- HTTP协议调试工具汇总
前言 本文收集了大量抓包工具,近40款,涵盖了各种开发语言(Java,C#,Delphi,C,C++,Objective-C,Node.js,Go,Python).各类前端(GUI,TUI,CUI,W ...
- SVN偷锁,强制解锁
1.将被锁文件SVN Check out...到本地硬盘2.点击文件右键,选择get lock 3.勾上 steal the locks 4.点击文件右键,选择 Release Lock操作即可 学无 ...
- SystemVerilog基本语法总结(中)
Systemverilog 语法总结(中) 上一个博客分享了SV基本的概念,这一博客继续分享,等下一个博客分享一个公司的验证的笔试题目. l 事件 背景: Verilog中当一个线程在一个事件上发生阻 ...
- Java导出Excel(项目实战Demo)
Controller 层 /** * 考勤机刷卡明细导出Excel * * @throws Exception */ // @RequiresPermissions("report:Expo ...
- sklearn实现多分类逻辑回归
sklearn实现多分类逻辑回归 #二分类逻辑回归算法改造适用于多分类问题1.对于逻辑回归算法主要是用回归的算法解决分类的问题,它只能解决二分类的问题,不过经过一定的改造便可以进行多分类问题,主要的改 ...
- 如何解决 Django 前后端分离开发的跨域问题
一.同源策略 1.先来说说什么是源 • 源(origin)就是协议.域名和端口号. 以上url中的源就是:http://www.company.com:80 若地址里面的协议.域名和端口号均相同则属于 ...
- selenium 启动、窗口、获取标题
1. from selenium import webdriver #启动chrom浏览器,没写executable_path,这是因为配置环境时,已经将chromdriver放到python安装文件 ...
- PV 动态供给【转】
前面的例子中,我们提前创建了 PV,然后通过 PVC 申请 PV 并在 Pod 中使用,这种方式叫做静态供给(Static Provision). 与之对应的是动态供给(Dynamical Provi ...