HDU1556 【树状数组】(改段求点)

博客介绍树状数组主要有3种类型,已转载含3种类型模板的文章,做题时分清类型套模板即可。还指出做题的注意点,如对数组b初始化、特定输入语句运用及输出的空格换行细节等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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\n",SUM(n));
    }
    return 0;
}

 

心得体会

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

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

 

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

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

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

(3)输出中的小细节。

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

       注意细节~~~~~

转载于:https://www.cnblogs.com/fightfor/p/3899621.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值