<题目链接>

题目大意:

就是给出N个区间,问这个区间是多少个区间的真子集。

解题分析:

本题与stars类似,只要巧妙的将线段的起点和终点分别看成 二维坐标系中的x,y坐标,就会发现,其实本题就是求每个点(把线段看成点) 左上角点的个数(包括边界,但并不包括与该点坐标完全相同的点),所以,与stars类似,对所有线段先进行排序,按 y坐标由大到小排序,若左边相同,就对x坐标进行从小到大排序。然后就可以直接对每个点的x坐标建立一维树状数组求解了。

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; typedef long long ll;
const int M =1e5+;
int n;
int tr[M],ans[M];
struct Seg{
int s,e,loc;
bool operator < (const Seg &tmp)const{
if(e==tmp.e)return s<tmp.s; //对于终点相同的线段,起点从小到大排序
else return e>tmp.e; //因为要求得该点左上角的点的数量,所以是将终点按从大到小排序
}
}seg[M];
int lowbit(int x){return x&(-x);}
void add(int i,int val){
while(i<=n){
tr[i]+=val;
i+=lowbit(i);
}
}
int sum(int i){
int ans=;
while(i>){
ans+=tr[i];
i-=lowbit(i);
}
return ans;
}
int main(){
while(scanf("%d",&n)!=EOF,n){
for(int i=;i<=n;i++){
scanf("%d%d",&seg[i].s,&seg[i].e);
seg[i].loc=i;
}
sort(seg+,seg+n+);
memset(tr,,sizeof(tr));
memset(ans,,sizeof(ans));
for(int i=;i<=n;i++){
if(i!=&&seg[i].s==seg[i-].s&&seg[i].e==seg[i-].e) //因为题目要求的是每个线段的真子集,所以这里对于那些完全相等的线段要进行特殊处理
ans[seg[i].loc]=ans[seg[i-].loc];
else
ans[seg[i].loc]=sum(seg[i].s+); //求出起点小于等于当前线段起点的线段个数,因为那些线段的终点比当前线段大,所以此时求的就是完全包含当前线段的线段个数
add(seg[i].s+,);
}
for(int i=;i<=n;i++){
i==n?printf("%d\n",ans[i]):printf("%d ",ans[i]);
}
}
return ;
}

2018-10-17

POJ 2481 Cows 【树状数组】的更多相关文章

  1. poj 2481 - Cows(树状数组)

    看的人家的思路,没有理解清楚,,, 结果一直改一直交,,wa了4次才交上,,, 注意: 为了使用树状数组,我们要按照e从大到小排序.但s要从小到大.(我开始的时候错在这里了) 代码如下: #inclu ...

  2. Cows POJ - 2481 (树状数组 + 单点更新 + 区间查询)

    Cows 思路:我们可以按照每个范围的S从小到大排序,相同的S按E从大到小排序,这样的好处是当前范围的S一定大于等于之前范围的S(即当前的范围可能被之前范围的包围),那么我们只需要统计之前的范围E比当 ...

  3. POJ 2481:Cows 树状数组

    Cows Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 14906   Accepted: 4941 Description ...

  4. POJ 2182 Lost Cows (树状数组 && 二分查找)

    题意:给出数n, 代表有多少头牛, 这些牛的编号为1~n, 再给出含有n-1个数的序列, 每个序列的数 ai 代表前面还有多少头比 ai 编号要小的牛, 叫你根据上述信息还原出原始的牛的编号序列 分析 ...

  5. poj2481 Cows 树状数组

    题目链接:http://poj.org/problem?id=2481 解题思路: 这道题对每组数据进行查询,是树状数组的应用.对于二维的树状数组, 首先想到排序.现在对输入的数据按右值从大到小排序, ...

  6. POJ2481:Cows(树状数组)

    Description Farmer John's cows have discovered that the clover growing along the ridge of the hill ( ...

  7. poj 2229 Ultra-QuickSort(树状数组求逆序数)

    题目链接:http://poj.org/problem?id=2299 题目大意:给定n个数,要求这些数构成的逆序对的个数. 可以采用归并排序,也可以使用树状数组 可以把数一个个插入到树状数组中, 每 ...

  8. POJ 2299 【树状数组 离散化】

    题目链接:POJ 2299 Ultra-QuickSort Description In this problem, you have to analyze a particular sorting ...

  9. poj 2155 Matrix (树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 16797   Accepted: 6312 Descripti ...

  10. poj2182Lost Cows——树状数组快速查找

    题目:http://poj.org/problem?id=2182 从后往前确定,自己位置之前没有被确定的且比自己编号小的个数+1即为自己的编号: 利用树状数组快速查找,可另外开一个b数组,角标为编号 ...

随机推荐

  1. CSS在线字体库,外部字体的引用方法@font-face

    @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当中或许有许 ...

  2. django 中自带的加密方法

    导入django 自带的加密算法 和flask中的哈希加密有一曲同工之妙.        from django.contrib.auth.hashers import make_password, ...

  3. linux文件与目录管理笔记

    ### Linux文件与目录管理 ---------- 绝对路径: / 相对路径:不以/开头的 当前目录 . 上一个工作目录 - 用户主目录 ~ root账户的主目录是/root 其他用户是/home ...

  4. Python全栈习题一

    1.执行 Python 脚本的两种方式 a../run.py  直接在命令行调用python脚本: b.python run.py 调用python解释器来调用Python脚本. 2.简述位.字节的关 ...

  5. java----微服务架构

    参考文档 https://topsale.gitbooks.io/java-cloud-dubbo/content/ 单体应用: 项目的架构完完全全属于传统的 MVC 架构,所有的子系统都集成在一个很 ...

  6. MariaDB修改默认字符集

    MariaDB修改默认字符集,以及创建数据库授权 1 . 修改server默认字符集utf8 [root@aws my.cnf.d]# vim /etc/my.cnf.d/server.cnf [my ...

  7. Linux系统编程目录

    进程环境 进程控制 1. fork.vfork.clone 2. 回收子进程 3. exec函数族 进程关系 1. 进程组 2. 会话 信号 1. 函数函数sigaction.signal 2.僵尸进 ...

  8. python--使用递归的方式建立二叉树

    树和图的数据结构,就很有意思啦. # coding = utf-8 class BinaryTree: def __init__(self, root_obj): self.key = root_ob ...

  9. 解决Python安装模块出错 ImportError: No module named setuptools

    1.下载ez_setup.py文件 下载地址:https://bootstrap.pypa.io/ez_setup.py 百度地址:http://pan.baidu.com/s/1jIgMO9w 2. ...

  10. 考虑实现一个不抛异常的swap

    Effective C++:参考自harttle land 类的swap实现与STL容器是一致的:提供swap成员函数, 并特化std::swap来调用那个成员函数. class Widget { p ...