poj 2352 树状数组
2014-07-17 08:43
309 查看
要求x1 <= x2,y1 <=y2的点的个数
然后还是先排序
AC代码如下:
然后还是先排序
AC代码如下:
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int MAX_X = 32000 + 10;//注意这里 const int MAX_N = 15000; struct Point{ int x, y; }; int sum[MAX_X]; int ans[MAX_N+10]; Point p[MAX_N+10]; int N; bool cmp( Point a, Point b ){ if( a.x < b.x ){ return true; }else if( a.x > b.x ){ return false; }else{ if( a.y < b.y ){ return true; }else{ return false; } } } inline int lowbit( int x ){ return x&-x; } int getsum( int x ){ int ans = 0; while( x > 0 ){ ans += sum[x]; x -= lowbit( x ); } return ans; } void updata( int x, int val ){ while( x <= MAX_X ){ sum[x] += val; x += lowbit( x ); } } int main(){ while( scanf( "%d", &N ) != EOF ){ for( int i = 1; i <= N; i++ ){ scanf( "%d%d", &p[i].x, &p[i].y ); p[i].x++; p[i].y++; } memset( sum, 0, sizeof( sum ) ); sort( p + 1, p + 1 + N, cmp ); for( int i = 1; i <= N; i++ ){ ans[getsum(p[i].y)]++; updata( p[i].y, 1 ); } for( int i = 0; i < N; i++ ){ printf( "%d\n", ans[i] ); } } return 0; }
相关文章推荐
- POJ_2352_树状数组
- poj2352~树状数组~线段树尝试失败~
- POJ 2352 Star (树状数组)
- POJ-2352-Stars-树状数组
- POJ 2352 Stars 解题思路,树状数组
- POJ2352 Stars(线段树 & 树状数组)
- POJ 2352 树状数组
- poj2352 树状数组
- POJ 2352 Stars 树状数组
- poj2352 Stars (第一道树状数组
- POJ 2352 starts 树状数组
- poj 2352 树状数组(星星的级别)
- poj 2352 树状数组
- POJ_2352 树状数组
- POJ 2352 Stars 树状数组
- POJ 2352 树状数组(Binary Indexed Tree)
- POJ 2352-Stars-树状数组
- POJ 2352 Stars 树状数组
- POJ 2352 stars 树状数组
- POJ2352 Stars 树状数组