POJ-2481 Cows---树状数组的运用
题目链接:
https://vjudge.net/problem/POJ-2481
题目大意:
if Si <= Sj and Ej <= Ei and Ei - Si > Ej - Sj, we say that cow i is stronger than cow j.
此处的含义就是线段[Sj, Ej]是线段[Si, Ei]的真子集,最后需要求出每条线段是多少条线段的真子集。
解题思路:
此处可以先对E坐标从大到小排序,相同的E对S从小到大排序,排完序后直接把S放入树状数组中,求出当前在树状数组中有多少比当前S小的数目。
由于E坐标从大到小,所以在某个线段放之前,终点在该线段的后面的线段已经全部加入了树状数组。而S比当前S小的线段一定是真包含该线段的。
WA点:注意此处求的是被多少线段真包含,所以在排序之后需要判断,如果两者线段一样那么就直接用前面的结果更新后面的结果。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
#include<set>
#include<queue>
#include<map>
#include<stack>
#include<vector>
#include<list>
#include<deque>
#include<sstream>
#include<cctype>
#define REP(i, n) for(int i = 0; i < (n); i++)
#define FOR(i, s, t) for(int i = (s); i < (t); i++)
using namespace std;
typedef long long ll;
int T, n, m, cases;
const int maxn = ;
struct node
{
int x, y, id;
bool operator < (const node & a)const
{
return y > a.y || (y == a.y && x < a.x);
}
}a[maxn];
int tree[maxn];
int ans[maxn];
int lowbit(int x)
{
return x&(-x);
}
int sum(int x)
{
int ret = ;
while(x > )
{
ret += tree[x];
x -= lowbit(x);
}
return ret;
}
void add(int x, int d)
{
while(x < maxn)
{
tree[x] += d;
x += lowbit(x);
}
}
int main()
{
while(scanf("%d", &n) && n)
{
memset(tree, , sizeof(tree));
memset(ans, , sizeof(ans));
memset(a, ,sizeof(a));
for(int i = ; i <= n; i++)
{
scanf("%d%d", &a[i].x, &a[i].y);
a[i].x++; a[i].y++;
a[i].id = i;
}
sort(a + , a + n + );
for(int i = ; i <= n; i++)
{
if(a[i].x == a[i - ].x && a[i].y == a[i - ]. y)ans[a[i].id] = ans[a[i - ].id];
else ans[a[i].id] = sum(a[i].x);
add(a[i].x, );
}
for(int i = ; i <= n; i++)
{
printf("%d ", ans[i]);
///若在此处在if判断是否输出空格会超时,以后就先输出a[1],然后依次输出空格+数字
}
printf("\n");
}
}
POJ-2481 Cows---树状数组的运用的更多相关文章
- poj 2481 - Cows(树状数组)
看的人家的思路,没有理解清楚,,, 结果一直改一直交,,wa了4次才交上,,, 注意: 为了使用树状数组,我们要按照e从大到小排序.但s要从小到大.(我开始的时候错在这里了) 代码如下: #inclu ...
- Cows POJ - 2481 (树状数组 + 单点更新 + 区间查询)
Cows 思路:我们可以按照每个范围的S从小到大排序,相同的S按E从大到小排序,这样的好处是当前范围的S一定大于等于之前范围的S(即当前的范围可能被之前范围的包围),那么我们只需要统计之前的范围E比当 ...
- POJ 2481:Cows 树状数组
Cows Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 14906 Accepted: 4941 Description ...
- POJ 2182 Lost Cows (树状数组 && 二分查找)
题意:给出数n, 代表有多少头牛, 这些牛的编号为1~n, 再给出含有n-1个数的序列, 每个序列的数 ai 代表前面还有多少头比 ai 编号要小的牛, 叫你根据上述信息还原出原始的牛的编号序列 分析 ...
- poj2481 Cows 树状数组
题目链接:http://poj.org/problem?id=2481 解题思路: 这道题对每组数据进行查询,是树状数组的应用.对于二维的树状数组, 首先想到排序.现在对输入的数据按右值从大到小排序, ...
- POJ2481:Cows(树状数组)
Description Farmer John's cows have discovered that the clover growing along the ridge of the hill ( ...
- poj 2229 Ultra-QuickSort(树状数组求逆序数)
题目链接:http://poj.org/problem?id=2299 题目大意:给定n个数,要求这些数构成的逆序对的个数. 可以采用归并排序,也可以使用树状数组 可以把数一个个插入到树状数组中, 每 ...
- POJ 2299 【树状数组 离散化】
题目链接:POJ 2299 Ultra-QuickSort Description In this problem, you have to analyze a particular sorting ...
- poj 2155 Matrix (树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 16797 Accepted: 6312 Descripti ...
- poj2182Lost Cows——树状数组快速查找
题目:http://poj.org/problem?id=2182 从后往前确定,自己位置之前没有被确定的且比自己编号小的个数+1即为自己的编号: 利用树状数组快速查找,可另外开一个b数组,角标为编号 ...
随机推荐
- Java Compare接口
在Java集合框架中有两种比较接口: Comparable 接口和 Comparator 接口. 一.Comparable 接口 public interface Comparable<T&g ...
- tomcat的安装部署
第一步: 先把压缩包拖到知道的目录,解压 tar xf apache-tomcat-8.0.27.tar.gz -C /usr/local/ ln -s /usr/local/apache-tomca ...
- thinkPHP5.0分页传参
分页函数paginate(),主要参数有:list_rows每页数量.page当前页.path URL路径.query URL额外参数.fragment URL锚点.type分页l类型 public ...
- java课后思考题(三)
1.以下代码为何无法通过编译?哪儿出错了? 因为在Foo类中已经有了一个Foo类的有参构造函数,所以Foo类中已经不默认Foo()的无参构造函数,所以在new Foo()时无法调用构造函数.所以在无法 ...
- Kudu版本升级(官网推荐的步骤)(Upgrade from a Previous Version of Kudu)
不多说,直接上干货! http://kudu.apache.org/docs/installation.html#sles_from_source
- css有关鼠标移动上去图片变透明度变化
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- HDU 3829——Cat VS Dog——————【最大独立集】
Cat VS Dog Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit S ...
- MVC4 过滤器使用和怎样控制全部action和部分action
MVC中的过滤器分四种分别为:IActionFilter(动作过滤器), IAuthorizationFilter(授权过滤器), IExceptionFilter(异常过滤器), IResultFi ...
- Oracle同义词、索引、分区
同义词:是现有对象的一个别名 简化SQL语句 隐藏对象的名称和所有者 提供对对象的公共访问 同义词共有两种类型 私有同义词只能在其模式内访问,且不能与当前模式的对象同名 公有同义词可被所有的数据库用户 ...
- Devexpress Xtrareport 并排报表
什么是并排报表呢? 按照我个人理解:并排报表是把两张或者两张以上的报表,放在一个报表页面. 注:为了方便,本示例使用同一个数据源,但是您可以使用相同的方法,而在一个报表文档中显示两个完全不同的 (使用 ...