hdu_1541 Stars (树状数组)
2013-07-20 14:45
411 查看
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1541
分析:
题意即线段树方法解:http://blog.csdn.net/u010885608/article/details/9388695
用树状数组解得算法分析:插入(x,y)点,先统计[0,y]有多少点已插入,总数即为点(x,y)的Lev。再插入y值,更新。
我的代码:
总结:
1.能用树状数组的就用树状数组吧,线段树好难写-,-
2.用一个Max记录树状数组的最右端值,速度由60+MS减少到40+MS。。
分析:
题意即线段树方法解:http://blog.csdn.net/u010885608/article/details/9388695
用树状数组解得算法分析:插入(x,y)点,先统计[0,y]有多少点已插入,总数即为点(x,y)的Lev。再插入y值,更新。
我的代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define MAXN 32000+10 #define N 15000 struct Piont { int x,y; }; Piont p ; int ans ; bool cmp(Piont a,Piont b) { if(a.x!=b.x) return a.x<b.x; else return a.y<b.y; } int C[MAXN]; int lowbit(int x) { return x&(-x); } int Max; void Modify_C(int index,int k) //更新树状数组下标为index的值。 { while(index<=Max+1) { C[index]+=k; //相关联的下标值一起被改变。 index+=lowbit(index); } } int Sum_C(int x) //求出[1,x]区间的和。C[1]的位置放0; { int sum=0; while(x>0) { sum+=C[x]; x-=lowbit(x); } return sum; } int main() { int n; while(scanf("%d",&n)!=EOF) { int i; Max=-1; //用Max找树状数组中最右端的值 for(i=0;i<n;i++) { scanf("%d%d",&p[i].x,&p[i].y); if(Max<p[i].y) Max=p[i].y; //注意这里只初始化的范围是[0,n],n表点的个数,如果有点(100,100),则C[100]没有初始。 // C[i]=0;//只要初始为0就可以了,不用转换,因为各区间和开始都是0; ans[i]=0; } memset(C,0,sizeof(C)); //一招初始,简单方便。 sort(p,p+n,cmp); for(i=0;i<n;i++) //开始插插入y; { int Lev; //避免0进入形成死循环,所以将0放在C[1]的位置, Lev=Sum_C(p[i].y+1); //统计[1,y+1]区间数的个数。即该点的Lev ans[Lev]++; Modify_C(p[i].y+1,1); //更新树状数组下标为index的值。 } for(i=0;i<n;i++) { printf("%d\n",ans[i]); } } return 0; }
总结:
1.能用树状数组的就用树状数组吧,线段树好难写-,-
2.用一个Max记录树状数组的最右端值,速度由60+MS减少到40+MS。。
相关文章推荐
- hdu 1541 Stars(树状数组,思路)
- HDU 1541 Stars (树状数组)
- 【HDU - 1541 - Stars 【 区间求和 单点更新 ==树状数组】
- poj 2352 && hdu 1541 Stars (树状数组水题)
- HDU_1541 Stars 【树状数组】
- 【HDU 1541】Stars(树状数组)
- HDU ACM 1541 Stars(树状数组)
- POJ 2352 && HDU 1541 Stars (树状数组)
- poj 2352 && hdu 1541 Stars(树状数组)
- poj 2352 && hdu 1541 Stars (树状数组)
- hdu-1541-Stars (树状数组)
- poj 2352 && hdu 1541 Stars (树状数组)
- hdu 1541 Stars(树状数组)
- HDU 1541 Stars (树状数组)
- HDU 1541 Stars (树状数组)
- hdu 1541 Stars(树状数组)
- 【HDU 1541 Stars 树状数组】
- hdu1541 Stars(树状数组+解释)
- HDU - 1541 Stars(树状数组)
- HDU 1541 Stars【树状数组】