传送门:POJ 2481


Cows Time Limit: 3000MS Memory Limit: 65536K

Problem 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.


题意:
有n头牛,每一头牛都有一个区间[s, e],对于牛i和牛j来说,满足下面的条件则证明牛i比牛j强壮:
si <= sj 且 ej <= ei and ei - si > ej - sj。现在已知每一头牛的区间,要求输出每头牛有几头牛比其强壮。

题解:
按照e的降序排序,e相等按s的升序,然后考虑s值,如果当前牛为[s, e],那么比它强壮的牛的个数,就等于排序在它前面的。下面的就是树状数组部分了。
和poj 3067 Japan 很像。


AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int N=110000;
int n;
ll c[2*N],sum[N];
struct Node
{int s,e;int id;
}cows[2*N];
bool cmp(Node a,Node b)
{if(a.e==b.e){return a.s<b.s;}return a.e>b.e;
}
int lowbit(int x)
{return x&(-x);
}
void update(int x,int k)
{while(x<=n){c[x]+=k;x+=lowbit(x);}
}
ll getsum(int x)
{ll ans=0;for(int i=x;i>0;i-=lowbit(i)){ans+=c[i];}return ans;
}
int main()
{while(scanf("%d",&n)&&n){memset(c,0,sizeof(c));memset(sum,0,sizeof(sum));for(int i=1;i<=n;i++){scanf("%d%d",&cows[i].s,&cows[i].e);cows[i].s++;cows[i].e++;cows[i].id=i;}sort(cows+1,cows+1+n,cmp);sum[cows[1].id]=0;update(cows[1].s,1);for(int i=2;i<=n;i++){if(cows[i].s==cows[i-1].s&&cows[i].e==cows[i-1].e){sum[cows[i].id]=sum[cows[i-1].id];}else{sum[cows[i].id]+=getsum(cows[i].s);}update(cows[i].s,1);}for(int i=1;i<=n;i++){printf("%I64d%c",sum[i],i==n?'\n':' ');}}return 0;
}

POJ 2481 Cows相关推荐

  1. POJ 2481 Cows POJ 2352 Stars(树状数组妙用)

    题目链接:POJ 2481 Cows POJ 2352 Stars 发现这两个题目都跟求逆序数有着异曲同工之妙,通过向树状数组中插入点的位置,赋值为1,或者++,然后通过求和来判断比当前 点 &quo ...

  2. POJ 2352 Starts POJ 2418 Cows

    两道相似的题,都可以转化为求一个点的某个方位(左上,左下,右上,右下)有多少个点,求和 POJ 2352 Starts Astronomers often examine star maps wher ...

  3. poj 3348 Cows 求凸包以及凸包的面积

    题目来源: http://poj.org/problem?id=3348 1:任意多边形p[0,n-1]的面积为 for(int i=0 ; i<=n-1 ; i++){ sum+= (sk[i ...

  4. POJ 3348 Cows(二维凸包)

    题目链接:https://cn.vjudge.net/problem/POJ-3348 题意:有一些数,坐标已知,要用这些树作为篱笆的顶点圈一块多边形的地养牛,每头牛占地大小50,问最多能养多少头牛. ...

  5. POJ 3348 Cows 凸包面积

    题目大意:连接个点,求围成的面积并除以50(向下取整) 题目思路:就是求凸包面积:按逆时针方向为凸包上每条边指定方向,对于每条边AB,累加(AXB)/2的值. #include<cstdio&g ...

  6. POJ 2483 Cows(树状数组)

    题目链接 题意 给出N个区间,求大于改区间的数目 AC 按照右区间降序排列,这样可以保证下一个区间的右端点小,这样树状数组就可以重复利用.树状数组存放的是以当前左区间到右区间一共有几个比自己大的区间, ...

  7. POJ 3348 Cows

    题目大意: 给你n棵树,可以用这n棵树围一个圈,然后在圈里面可以养牛,每个牛需要50平方米的空间,问最多可以养多少牛? 其实就是求一个凸包,计算凸包面积,然后除以50,然后就得到答案,直接上模板了. ...

  8. POJ 3348 Cows(凸包面积)

    有 n 棵树,给出他们的顶点,每头牛的活动范围为 50 平方米,以 n 棵树为顶点围成篱笆,问最多可以容纳多少头牛 求凸包面积模板题 const int N=1e4+5;int i,j,k;int n ...

  9. linux 下查看应用版本信息,Linux下查看版本信息

    Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等. 1.# uname -a   (Linux查看版本当前操作系统内核信息) 2.# cat /proc/vers ...

最新文章

  1. Docker 容器技术 — Dockerfile
  2. sort用法(默认按升序排列)
  3. 中国移动雄安研究院 2020校园招聘笔试JAVA方向(二)
  4. ICCV Neural Architects Workshop - 对话深度学习大咖
  5. 使用 apiDoc 为你的Node.js API 生成文档
  6. 用随机数发生器射击自己的脚
  7. PHP API接口GETPOST请求封装(通用)
  8. python实现线性回归预测不用sklearn库_python – 为什么我的自定义线性回归模型不匹配sklearn?...
  9. 程序员你造吗?2016年加州将建造子弹头火车,你还在CODE?
  10. iOS开发日记40-详解React Native
  11. df 查看显示所有磁盘的信息
  12. Java8 实战系列-03-lambda 表达式实战
  13. 论坛介绍 | COSCon'22 开源硬件(H)
  14. 天问:《三体》世界真的存在吗?(太阳系与银河系简介)
  15. 泛微OA 任意文件上传漏洞
  16. i.MX6ULL驱动开发 | 04-Linux设备树基本语法与实例解析
  17. MATLAB中创建矩阵的方法
  18. [css] CSS画一个三角形,CSS绘制空心三角形
  19. 事件抽取与事理图谱(一)
  20. 秋招历险记-深度学习

热门文章

  1. React 超详细入门教程
  2. 一键转换ASCII码
  3. android流量监控软件设计与实现,基于android平台的流量监控系统的设计与实现
  4. GeoJson的生成与解析,JSON解析,Java读写geojson,geotools读取shp文件,Geotools中Geometry对象与GeoJson的相互转换
  5. 2021-2027全球及中国耳鼻喉科窥镜行业研究及十四五规划分析报告
  6. doc转docx文件会乱吗_java下载doc/docx文件乱码的问题
  7. 【Matlab/Simulink】PMSM模块
  8. Unity3D之游戏架构脚本该如何来写
  9. 程序员独白:经济危机中,一个老女人15万包我一年
  10. 我的新概念英语第四册