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 ...
随机推荐
- VBox 安装 macOS 10.12
安装步骤⑴ 下载及解压 macOS 10.12 Sierra Final by TechReviews.rar ⑵ 下载及双击安装 VirtualBox-5.1.6-110634-Win.exe ,默 ...
- Kotlin语言学习笔记(7)
反射 // 反射 val c = MyClass::class val c2 = MyClass::class.java // 获取KClass的引用 val widget: Widget = ... ...
- 向oracle中的表插入数据的方法
向oracle中的表插入数据的方法有以下几种: 假设表名为User 第一种方法:select t.*,rowid from User t;-->点击钥匙那个标记就可向表中添加数据 第二种方法:s ...
- MongoDB 数据库命令
数据库命令 连接成功后,默认使用test数据库 查看当前数据库名称 db 查看所有数据库名称,列出所有在物理上存在的数据库 show dbs 切换数据库,如果数据库不存在也并不创建,直到插入数据或创建 ...
- Mysql修改密码办法
方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...
- 启动tomcat时,一直卡在Deploying web application directory
本来今天正常往服务器上扔一个tomcat 部署一个项目的, 最后再启动tomcat 的时候 发现项目一直都访问不了,看了一下日志: 1 2 3 4 5 6 7 [root@iz8vbdzx7y7owm ...
- python复制文件,路径不存在问题(Windows和linux路径分隔符不统一)
问题: python脚本涉及到复制文件,而我们需要兼容Windows.linux和mac环境 (Windows和linux的路径分隔符不同:通过os.path.sep查看分隔符) 如果用[路径名+ ...
- 64位tomcat不能配32位的JDK使用
警告: The APR based Apache Tomcat Native library failed to load. The error reported was [D:\apache-tom ...
- nyoj743-复杂度 【排列组合】
http://acm.nyist.net/JudgeOnline/problem.php?pid=743 复杂度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 fo ...
- Python format 格式化函数。
Python format 格式化函数 Python 字符串 Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能. 基本语法是通过 {} 和 ...