poj 2352 Stars (树状数组)
来源:互联网 发布:云服务器端口怎么开启 编辑:程序博客网 时间:2024/06/10 22:22
题目;http://poj.org/problem?id=2352
题意:给定n个点的坐标(x,y),n个点按y坐标从小到大输入,如果y坐标相等的按x坐标从小到大输入。统计每个点的左下方有多少个点(包括左边和下边),输出统计数为0的个数、统计数为1的个数...统计数为n-1的有多少个。
分析:对于任意一个点p(x,y),在p的左下方的点t(x',y')的纵坐标y'肯定≤y,那么问题就转化为,对于所有的点,在之前输入的点里面统计横坐标小于x的点的个数(由于输入有序,纵坐标其实没用)。那么用树状数组就很容易解决了,不过注意x可能等于0,0+lowbit(0)==0,会导致死循环,将所有的点向由平移1个点位就行了。
代码:
#include <iostream>#include <cstdio>#include <algorithm>#include <map>#include <cstring>using namespace std;const int INF = 32005;int tree[INF],ans[INF];int lowbit(int x){return x&-x;}void update(int x,int v){for(int i=x;i<INF;i+=lowbit(i))tree[i]+=v;}int query(int x){int ret(0);for(int i=x;i>0;i-=lowbit(i))ret+=tree[i];return ret;}int main(){int n,i,j,x,y;while(scanf("%d",&n)!=EOF){memset(tree,0,sizeof(tree));memset(ans,0,sizeof(ans));for(i=0;i<n;i++){scanf("%d%d",&x,&y);++ans[query(x+1)];update(x+1,1);}for(i=0;i<n;i++)printf("%d\n",ans[i]);}return 0;}
0 0
- POJ 2352 Stars 树状数组
- POJ 2352 Stars【树状数组】
- (树状数组) poj 2352 Stars
- POJ-2352-Stars-树状数组
- POJ 2352 Stars 树状数组
- POJ 2352 Stars 【树状数组】
- POJ 2352 Stars 树状数组
- POJ-2352 Stars【树状数组】
- POJ 2352 Stars 树状数组
- poj 2352 Stars 树状数组
- poj 2352 Stars 树状数组
- POJ:2352 Stars(树状数组)
- [树状数组]POJ 2352 Stars
- POJ-2352-Stars 树状数组
- Stars - POJ 2352 树状数组
- poj 2352 Stars 树状数组
- poj 2352 Stars (树状数组)
- POJ 2352 Stars【树状数组】
- android BLE搜索beacon
- c++链表std::list
- 在线扫描PDF JPG 图片上面文字
- service和activity通信
- opencv3.0 新算法
- poj 2352 Stars (树状数组)
- android水波纹RippleEffect源码解析
- 企业级搜索应用服务器Solr4.10.4部署开发详解(2)- Solr使用-创建集合表、存储、查询
- String、stringbuffer与stringbuilder的区别
- 开始使用Android Sutdio(一)下载安装
- 黑苹果声卡驱动
- PostgreSQL 代码生成工具选择
- stl之迭代器相应型别
- js实现图片滚轮放大缩小以及鼠标拖动