博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2481
阅读量:7227 次
发布时间:2019-06-29

本文共 1439 字,大约阅读时间需要 4 分钟。

  一道树状数组的应用题,和POJ 3067非常类似,这道题是求比自己强壮(e更大,s更小)的牛的数量。

  将应用到这道题上,如果先对e按照降序排列,每加入一只牛,当前已经加入树状数组的牛的s如果比这只牛小,那么那些牛就更强壮,所以同样是在树状数组里的求和问题。同样,对s的排序规则关系到e相同时的情况,由于s更小就更强壮,所以先把s小的加入,于是s就按照升序排列。再考虑e和s都相同的情况,假设有一些牛的e和s都相同,为cow1,cow2.....,cowK,那么更强壮的牛的数量x,满足cow1=cow2=....=cowK=x。所以遇到e和s都相同的状况时,只需要复制答案就可以了。

  另外,由于排序后,顺序和开始给出数据时的顺序不同,所以需要记录一下开始给出数据时的顺序。

#include
#include
#include
#define MAX_COW 100005struct node{ int s; int e; int order;}cow[MAX_COW];int c[MAX_COW],ans[MAX_COW];int cmp(const void *,const void *);inline lowbit(int);int get_sum(int);void update(int,int);int main(){ int n; while(scanf("%d",&n)!=EOF&&n!=0) { int i; for(i=1;i<=n;i++) { scanf("%d%d",&cow[i].s,&cow[i].e); cow[i].s+=1;cow[i].e+=1; cow[i].order=i; } qsort(&cow[1],n,sizeof(struct node),cmp); memset(c,0,sizeof(c)); memset(ans,0,sizeof(ans)); ans[cow[1].order]=0; update(cow[1].s,1); for(i=2;i<=n;i++) { if(cow[i].e==cow[i-1].e&&cow[i].s==cow[i-1].s) { ans[cow[i].order]=ans[cow[i-1].order]; } else { ans[cow[i].order]=get_sum(cow[i].s); } update(cow[i].s,1); } for(i=1;i
0;i-=lowbit(i)) { sum+=c[i]; } return sum;}void update(int x,int val){ int i; for(i=x;i

转载于:https://www.cnblogs.com/coredux/archive/2012/08/09/2630282.html

你可能感兴趣的文章
spring cloud构建互联网分布式微服务云平台-SpringCloud集成项目简介
查看>>
基于房源的画像分析
查看>>
80% UI 初学者走过的弯路,你走了几条?
查看>>
文档和元素的几何滚动
查看>>
php 设计模式
查看>>
Java springcloud B2B2C o2o多用户商城 springcloud架构(八)springboot整合mongodb
查看>>
3年工作经验的Java程序员面试经过
查看>>
Mysql 批量写入数据,对于这类性能问题,你是如何优化的
查看>>
MySQL无法启动几种常见问题小结
查看>>
阿里CTO:阿里所有技术和产品输出都将必须通过阿里云进行
查看>>
更好用的集群限流功能,Sentinel 发布 v1.4.2
查看>>
Python(生成执行文件)
查看>>
redis安装配置 - ttlsa教程系列之redis
查看>>
Linux --DHCP服务器配置;DHCP服务器中继
查看>>
IE版本多的可爱_已迁移
查看>>
eclipse查看jar包中class的中文注释乱码问题的解决
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
mariadb安装
查看>>
vue+vuex+axios+echarts画一个动态更新的中国地图
查看>>