博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1541 树状数入门
阅读量:6333 次
发布时间:2019-06-22

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

第一次接触树状数  很神奇的一个结构,适用于快速修改数组和数组前n项求和!复杂度log(n);

题意:给出n个星星坐标   按y为第一关键字x为第二关键字的顺序给出,星星左下角所包含的星星的个数为该星星的等级,输出0~n-1等级星星的个数;

 这里给出图示方便了解树状数组结构:

主要掌握和理解几个函数的作用

lowbit(x)返回二进制表示最小进制幂2^k

sum(x)前x项和

add(x,y)x项修改增加y

 

代码:

#include
#include
using namespace std;int N;int ar[32005]; //数状数组int c[32005]; //等级int lowbit(int t) //位运算,求最小幂2^k的k{ return t&(-t);}void add(int t,int v) //对元素进行加法操作{ for(int i=t;i<=32005;i+=lowbit(i)) { ar[i]+=v; }}int sum(int t){ int s=0; for(int i=t;i>0;i-=lowbit(i)) { s+=ar[i]; } return s;}int main(){ int x,y; while(cin>>N) { memset(ar,0,sizeof(ar)); memset(c,0,sizeof(c)); for(int i=0;i
>x>>y; c[sum(x+1)]++; //等级为(sum(x+1)//求前面总星数)=前(x+1)项和 add(x+1,1); //第(x+1)个数组+1 数组下标从1开始 所以+1; } for(int j=0;j

 

转载于:https://www.cnblogs.com/amourjun/archive/2013/04/05/5134194.html

你可能感兴趣的文章
NFC·(近距离无线通讯技术)
查看>>
多线程基础(三)NSThread基础
查看>>
PHP的学习--Traits新特性
查看>>
ubuntu下,py2,py3共存,/usr/bin/python: No module named virtualenvwrapper错误解决方法
查看>>
Ext.form.field.Number numberfield
查看>>
Linux文件夹分析
查看>>
解决部分月份绩效无法显示的问题:timestamp\union al\autocommit等的用法
查看>>
nginx 域名跳转 Nginx跳转自动到带www域名规则配置、nginx多域名向主域名跳转
查看>>
man openstack >>1.txt
查看>>
linux几大服务器版本大比拼
查看>>
在BT5系统中安装postgresQL
查看>>
Can't connect to MySQL server on 'localhost'
查看>>
【Magedu】Week01
查看>>
写给MongoDB开发者的50条建议Tip25
查看>>
为什么要让带宽制约云计算发展
查看>>
[iOS Animation]-CALayer 绘图效率
查看>>
2012-8-5
查看>>
VS中ProjectDir的值以及$(ProjectDir)../的含义
查看>>
我的友情链接
查看>>
PHP实现排序算法
查看>>