【poj 2352】 Stars 及浅谈树状数组

原创 2018年04月14日 22:43:27

树状数组:

       1、 一个可以动态维护前缀和的一个数据结构,支持求和和单点修改。在拓展情况下可以支持区间修改。
       2、 优点:代码短,O(lgn)的开销

lowbit是非常有用的 x&(-x) 利用补码的性质得出最低位的数字。


核心代码:

inline int lowbit(int x){ return x&(-x);}
void add(int x,int val)
{
	/* 修改 a[x] */ 
	for (int i = x ; i < maxn ; i += lowbit(i) )
		node[i] += val; 
} 
int get(int x){
	/* 求a[1] + a[2] + ... a[x] */ 
	int sum = 0;
	for (int i = x ; i ; i -= lowbit(i))
		sum += node[i];
	return sum; 


单点修改RMQ就不讲了实在是太容易了。


POJ 2352

给出按照y升序,y相同x升序的有序数列,

分别统计: 在某个坐标左下(包括左、下)有1~n个坐标的个数


分析:

       1、 当y相同时,很明显,求在这个区间内的和就可以了。

       2、 当y大,而x小的时候:我们求的是什么?想一想,也就是我们求的时之前横坐标值为1~x的坐标总数,从这个道理上讲,求(y,x)和求(y+1,x)并没有本质区别。因此,我们只要像1一样求和就可以了。

        3、求和结束后插入新的节点,值位y

       4、在维护前缀的时候有不干涉后面情况的性质,因此可以使用树状数组


#include <iostream>
#include <cstring>
using namespace std;
#define maxn 32222 
int node[maxn];
int levels[maxn];
inline int lowbit(int x){ return x&(-x);}
void add(int x,int val)
{
	/* 修改 a[x] */ 
	for (int i = x ; i < maxn ; i += lowbit(i) )
		node[i] += val; 
} 
int get(int x){
	/* 求a[1] + a[2] + ... a[x] */ 
	int sum = 0;
	for (int i = x ; i ; i -= lowbit(i))
		sum += node[i];
	return sum; 
}

int main(){  
    int n,x,y;  
    while(~scanf("%d",&n)){  
        memset(levels,0,sizeof(levels));  
        int tt=n;  
        while(tt--){  
            scanf("%d%d",&x,&y);  
            x++;
            levels[get(x)]++;  
            add(x,1);  
        }  
        for(int i=0;i<n;i++) printf("%d\n",levels[i]);  
    }  
}  

      

入侵检测工具Watcher(含源码)

入侵检测工具Watcherby quack 参考资料 Watcher by hyperion in pharck 一、写在前面 你如何了解系统是否被攻克?在你发现系统中多了些奇怪的帐号或者某些特洛伊程...
  • woodennail
  • woodennail
  • 2002-02-22 00:00:00
  • 1066

POJ2352:Stars(树状数组)

Description Astronomers often examine star maps where stars are represented by points on a plane ...
  • libin56842
  • libin56842
  • 2015-06-21 16:44:38
  • 1615

Poj(2352)——Stars(树状数组)

Description Astronomers often examine star maps where stars are represented by points on a plane ...
  • ACMer_hades
  • ACMer_hades
  • 2015-05-30 15:31:58
  • 914

POJ-2352 Stars【树状数组】

题目链接:http://poj.org/problem?id=2352 题目大意: 给你星星的坐标(y递增,若y相等,x递增),每个星星都有一个等级,规定它的等级就是在它左下方的星星的个数。输入所...
  • niushuai666
  • niushuai666
  • 2012-03-24 07:54:38
  • 2938

POJ2352_Stars(线段树/单点更新)

解题报告 题意: 求在坐标系中
  • u013320038
  • u013320038
  • 2014-08-09 19:15:42
  • 1644

[ACM] hdu 2352 Stars (树状数组)

Stars Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30272   Accepte...
  • sr19930829
  • sr19930829
  • 2014-04-19 20:53:51
  • 1490

poj2352stars【treap树水题】

又是审题!虽说好多网友都被坑在这里了== 说题意:给出的这些坐标只考虑小于等于自身横坐标的个数(不包括自己)分别有多少点的这种个数是在0~n-1范围内的 裸的treap不解释 /***********...
  • zhou_yujia
  • zhou_yujia
  • 2016-01-26 22:29:54
  • 372

POJ-2352-Stars

POJ-2352-Stars http://poj.org/problem?id=2352 给出n个星星的坐标,如果一个星星的左下方(包含正左和正下)有k颗星星,就说这颗星星是k级的,统计每个等级...
  • Cambridgeacm
  • Cambridgeacm
  • 2012-07-22 15:15:06
  • 1587

【poj 2352】Stars 题意&题解&代码(C++)

poj 树状数组
  • DERITt
  • DERITt
  • 2016-04-06 08:45:18
  • 588

POJ 2352 Stars 【树状数组】

Stars Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 38952   Accepte...
  • wyjwyl
  • wyjwyl
  • 2015-11-24 17:11:47
  • 216
收藏助手
不良信息举报
您举报文章:【poj 2352】 Stars 及浅谈树状数组
举报原因:
原因补充:

(最多只允许输入30个字)