题意:易知。。。

思路:要求对树状数组的理解。

代码实现:

#include<iostream>
#include<cmath>
using namespace std;
int n,a[100001];
int lowbit(int x)
{
    return x&(-x);
}
void build(int x,int y)//建树
{
    while(x<=n)
    {
        a[x]+=y;
        x+=lowbit(x);
    }
}
int sum(int x)//求和
{
    int s=0;
    while(x>0)
    {
        s=s+a[x];
        x=x-lowbit(x);
    }
    return s;
}
int main()
{
    while(scanf("%d",&n)!=EOF&&n)
    {
        int x,y;
        memset(a,0,sizeof(a));
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&x,&y);
            build(x,1);
            build(y+1,-1);//关键所在
        }
        for(i=1;i<n;i++)
            printf("%d ",sum(i));
        printf("%d\n",sum(n));
    }
    return 0;
}

 

相关文章:

  • 2021-08-16
  • 2021-11-10
  • 2021-07-25
  • 2021-10-24
  • 2021-10-30
  • 2022-01-20
  • 2022-02-18
  • 2022-01-20
猜你喜欢
  • 2021-08-12
  • 2021-12-03
  • 2022-12-23
  • 2021-10-18
  • 2021-05-27
  • 2022-12-23
  • 2021-08-06
相关资源
相似解决方案