POJ 2481 Cows
2015-07-13 20:23
204 查看
分析:每一头牛都一片领域[s,e]如果一头牛的[s,e]包含另一头牛的[s,e],那么就比另一头牛强,于是我们先把牛排序,e大的排在前,相等的话就s小的排在前,这样排在前面的牛一定不会比排在后面的牛弱,如果两头牛的s和e都相等的话,那么比他们强壮的牛的数量也相等,不然的话求比一头牛强的数量只要求出s<=这头牛的牛的数量就可以。
# include <stdio.h> # include <string.h> # include <algorithm> using namespace std; typedef struct node { int s,e,num; }Node; int n,c[100005],ans[100005]; Node cow[100005]; bool cmp(Node a,Node b) { if(a.e==b.e) return a.s<b.s; else return a.e>b.e; } int lowbit(int x) { return x&(-x); } int sum(int n) { int s=0; while(n>0) { s+=c ; n-=lowbit(n); } return s; } void update(int i,int value) { while(i<=100005) { c[i]+=value; i+=lowbit(i); } } int main() { int i,s,e; while(scanf("%d",&n),n!=0) { for(i=0;i<n;i++) { scanf("%d%d",&s,&e); cow[i].s=++s; cow[i].e=++e; cow[i].num=i; } sort(cow,cow+n,cmp); memset(c,0,sizeof(c)); for(i=0;i<n;i++) { if(i!=0&&cow[i].s==cow[i-1].s&&cow[i].e==cow[i-1].e) ans[cow[i].num]=ans[cow[i-1].num]; else ans[cow[i].num]=sum(cow[i].s); update(cow[i].s,1); } for(i=0;i<n-1;i++) printf("%d ",ans[i]); printf("%d\n",ans[i]); } return n; }
相关文章推荐
- Gym 100496A Avangard Latin Squares(矩阵游戏)
- JSP 标准标签库(JSTL)之最常用的JSTL标签总结
- const型变量与函数重载
- CXF WebService整合Spring
- 算法导论 第五章:随机算法
- 类的const和非const成员函数的重载
- hdu 4908 BestCoder Sequence 发现M中值是字符串数, 需要预处理
- C++ 学习之函数重载、基于const的重载
- javaWeb
- 跟着实例学习设计模式(8)-适配器模式adapter(结构型)
- Linux下使用Caffe对图片进行训练并分类的简单流程
- [C++] const与重载
- CPU上涨100%的问题排查
- php中文乱码问题分析及解决办法
- C++中const重载
- 最大下标距离(算法)
- swift 集合类
- 浅谈继承关系和接口
- 二维“有序”数组查找问题的解决
- 【上海交大oj】能量项链(动态规划)