2018.07.08 POJ 2481 Cows(线段树)
Cows
Time Limit: 3000MS Memory Limit: 65536K
Description
Farmer John’s cows have discovered that the clover growing along the ridge of the hill (which we can think of as a one-dimensional number line) in his field is particularly good.
Farmer John has N cows (we number the cows from 1 to N). Each of Farmer John’s N cows has a range of clover that she particularly likes (these ranges might overlap). The ranges are defined by a closed interval [S,E].
But some cows are strong and some are weak. Given two cows: cowi and cowj, their favourite clover range is [Si, Ei] and [Sj, Ej]. If Si <= Sj and Ej <= Ei and Ei - Si > Ej - Sj, we say that cowi is stronger than cowj.
For each cow, how many cows are stronger than her? Farmer John needs your help!
Input
The input contains multiple test cases.
For each test case, the first line is an integer N (1 <= N <= 105), which is the number of cows. Then come N lines, the i-th of which contains two integers: S and E(0 <= S < E <= 105) specifying the start end location respectively of a range preferred by some cow. Locations are given as distance from the start of the ridge.
The end of the input contains a single 0.
Output
For each test case, output one line containing n space-separated integers, the i-th of which specifying the number of cows that are stronger than cowi.
Sample Input
3
1 2
0 3
3 4
0
Sample Output
1 0 0
Hint
Huge input and output,scanf and printf is recommended.
Source
POJ Contest,Author:Mathematica@ZSU
事实上,我感觉这道题出出来是考察我们的英文水平的。让我们用OI" role="presentation" style="position: relative;">OIOI的语法来翻译一下题目,有n" role="presentation" style="position: relative;">nn个区间,求出每个区间被包含的次数(重合不算)。显然先按照左端点排序,然后所有区间的左端点就是单调不减的了。这样的话答案就只与右端点有关了。这个直接区间查询单点插入就行了。
代码如下:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
#define N 100005
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+ch-'0',ch=getchar();
return ans;
}
int n,ans[N];
struct Node{int s,t,id;}q[N];
struct st{int l,r,sum;}T[N<<2];
inline void pushup(int p){T[p].sum=T[lc].sum+T[rc].sum;}
inline void build(int p,int l,int r){
T[p].l=l,T[p].r=r,T[p].sum=0;
if(l==r)return;
build(lc,l,mid);
build(rc,mid+1,r);
}
inline void update(int p,int k){
if(T[p].l==T[p].r){
++T[p].sum;
return;
}
if(k<=mid)update(lc,k);
else update(rc,k);
pushup(p);
}
inline int query(int p,int ql,int qr){
if(ql>T[p].r||T[p].l>qr)return 0;
if(ql<=T[p].l&&T[p].r<=qr)return T[p].sum;
if(qr<=mid)return query(lc,ql,qr);
if(ql>mid)return query(rc,ql,qr);
return query(lc,ql,mid)+query(rc,mid+1,qr);
}
inline bool cmp(Node a,Node b){return a.s==b.s?a.t>b.t:a.s<b.s;}
int main(){
while(scanf("%d",&n)&&n){
for(int i=1;i<=n;++i)q[i].s=read()+1,q[i].t=read()+1,q[i].id=i;
build(1,1,100000);
sort(q+1,q+n+1,cmp);
for(int i=1;i<=n;++i){
if(q[i].s==q[i-1].s&&q[i].t==q[i-1].t){
ans[q[i].id]=ans[q[i-1].id];
}
else ans[q[i].id]=query(1,q[i].t,100000);
update(1,q[i].t);
}
for(int i=1;i<=n;++i)printf("%d ",ans[i]);
puts("");
}
return 0;
}
2018.07.08 POJ 2481 Cows(线段树)的更多相关文章
- POJ 2481 Cows (线段树)
Cows 题目:http://poj.org/problem?id=2481 题意:有N头牛,每仅仅牛有一个值[S,E],假设对于牛i和牛j来说,它们的值满足以下的条件则证明牛i比牛j强壮:Si &l ...
- 2018.07.08 hdu5316 Magician(线段树)
Magician Problem Description Fantasy magicians usually gain their ability through one of three usual ...
- 2018.07.31cogs2964. 数列操作η(线段树)
传送门 线段树基本操作. 给出一个排列b,有一个初始值都为0的数组a,维护区间加1,区间统计区间∑(ai/bi)" role="presentation" style=& ...
- 2018.07.25 hdu5306Gorgeous Sequence(线段树)
传送门 线段树基本操作. 要求维护区间取min" role="presentation" style="position: relative;"> ...
- 2018.07.23[PA2015]Siano(线段树)
[PA2015]Siano 描述 Description 农夫Byteasar买了一片n亩的土地,他要在这上面种草. 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会长高a[i]厘 ...
- POJ 2481 Cows(树状数组)
Cows Time Limit: 3000MS Memory L ...
- POJ 2481 Cows 【树状数组】
<题目链接> 题目大意: 就是给出N个区间,问这个区间是多少个区间的真子集. 解题分析: 本题与stars类似,只要巧妙的将线段的起点和终点分别看成 二维坐标系中的x,y坐标,就会发现,其 ...
- poj 2481 Cows(树状数组)题解
Description Farmer John's cows have discovered that the clover growing along the ridge of the hill ( ...
- 2018.07.03 POJ 3348 Cows(凸包)
Cows Time Limit: 2000MS Memory Limit: 65536K Description Your friend to the south is interested in b ...
随机推荐
- XE Styles不见了
C:\Users\Public\Documents\Embarcadero\Studio\15.0\Styles 我移动到D盘了 D:\Users\Public\Documents\Embarcade ...
- 机器学习入门-DBSCAN聚类算法
DBSCAN 聚类算法又称为密度聚类,是一种不断发张下线而不断扩张的算法,主要的参数是半径r和k值 DBSCAN的几个概念: 核心对象:某个点的密度达到算法设定的阈值则其为核心点,核心点的意思就是一个 ...
- jdk升级到9,eclipse打不开
jdk从1.8到1.9之后删除了不少之前Deprecated的类. eclipse 版本oxygen和neon对应jdk1.8 eclipse 版本luna和mars对应jdk1.7,1.6 在打开e ...
- Simple2D-17(音乐播放器)嵌入 ImGui 库
要把 ImGui 应用到项目中,先拷贝方框中的源文件到项目: 这些文件是 ImGui 的实现源码,可作为第三方库新建一个文件夹进行放置. 接下来是渲染部分的代码,项目可能使用 DirectX 或 Op ...
- vue基础——列表渲染
列表渲染 用 v-for 把一个数组对应为一组元素 我们用 v-for 指令根据一组数组的选项列表进行渲染.v-for 指令需要使用 item in items 形式的特殊语法, items 是源数据 ...
- 使用plsql进行查询的时候出现错误:动态执行表不可访问,本会话的自动统计被终止
- React 简单介绍
React 简单介绍 作者 RK_CODER 关注 2014.12.10 17:37* 字数 2516 阅读 55715评论 6喜欢 70 why React? React是Facebook开发的一款 ...
- salt之grains组件
grains是saltstack最重要的组件之一,作用是收集被控主机的基本信息,这些信息通常都是一些静态类的数据,包括CPU.内核.操作系统.虚拟化等,在服务器端可以根据这些信息进行灵活定制,管理员可 ...
- nginx配置【转】
转自:http://www.ha97.com/5194.html #定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_proc ...
- codeblocks 更换颜色主题
关闭codeblocks,下载主题文件(colour_themes.conf).在关闭codeblocks的情况下,linux下的~/.config/codeblocks/下有个conf文件,将其备份 ...