hdoj 1556
解决:树状数组基础,插段求点 数据大小100000
/*本来是不打算写这个报告,就是一个基础的插段问点,但是ac之后,又搜了一个代码,让对树状数组有了一点新的认识,就从新改了一下,仍然是可以向后更新,向前求和,只是更新的时候,多更新的要减去,求点的时候向前累计,只有更新到的点才有值*/ #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N=100005; int c[N]; int n; int lowbit(int x) { return x&(-x); } void update(int p,int inc) { for(int i=p;i<=n;i+=lowbit(i)) c[i]+=inc; } int get(int p) { int res=0; for(int i=p;i>0;i-=lowbit(i)) res+=c[i]; return res; } int main() { int a,b; while(scanf("%d",&n),n) { memset(c,0,sizeof(c)); for(int i=0;i<n;i++) { scanf("%d",&a); scanf("%d",&b); update(a,1); update(b+1,-1); } for(int i=1;i<n;i++) printf("%d ",get(i)); printf("%d\n",get(n)); } system("pause"); return 0; }