zoukankan      html  css  js  c++  java
  • HDU1556 【树状数组】(改段求点)

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define maxn 100050
    using namespace std;
    
    int b[maxn];
    int n;
    int lowbit(int x)
    {
        return x&(-x);
    }
    
    void ADD(int x, int c)    //向下查询
    {
        for (int i=x; i>0; i-=i&(-i)) 
        b[i] += c;
    }
    int SUM(int x)     //向上统计
    {
        int s = 0;
        for (int i=x; i<=n; i+=i&(-i)) 
        s += b[i];
        return s;
    }
    
    int main()
    {
        while(scanf("%d",&n)&&n)
        {
            int x,y;
            memset(b,0,sizeof b);
            for(int i=0; i<n; i++)
            {
                scanf("%d%d",&x,&y);
                ADD(y,1);
                ADD(x-1,-1);
            }
            for(int i=1; i<n; i++)
            {
                printf("%d ",SUM(i));
            }
            printf("%d
    ",SUM(n));
        }
        return 0;
    }

    心得体会

    树状数组主要就分为3种类型。针对这3种类型,我已经转载了一篇文章,里面有3种类型的模板。

    做题的时候,只要分清楚是考查哪种类型,然后套模板就可以了。

    针对这道题,还有几点要注意的地方。

    (1) 不要忘了对数组b进行初始化。

    (2)输入   while(scanf("%d",&n)&&n)   的运用,既完成了输入,同时判断了n 是否为0.

    (3)输出中的小细节。

           前n个数之间存在空格,最后一个数后面不输出空格,直接换行。

           注意细节~~~~~

  • 相关阅读:
    快速读取数字
    std:ios:sync_with_stdio (false)以及局限性
    差分,差分数组
    归并排序
    2020-07-06日报博客
    OAuth2-授权码模式 登录流程
    OAuth2 简介
    SpringSecurity连接数据库
    SpringSecurity中的授权
    SpringSecurity 入门
  • 原文地址:https://www.cnblogs.com/fightfor/p/3899621.html
Copyright © 2011-2022 走看看