【HDU 1556】区间修改点查询的树状数组

1.题目链接。裸的区间修改点查询的树状数组,采用一维差分数组实现。查询的时候,对这个差分数组求前缀和就是答案。

#include<bits/stdc++.h>
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;

const int MAXN = 100010;
int c[MAXN];
int n;

int lowbit(int x)
{
	return x & (-x);
}
void add(int i, int val)
{
	while (i <= n)
	{
		c[i] += val;
		i += lowbit(i);
	}
}
int sum(int i)
{
	int s = 0;
	while (i > 0)
	{
		s += c[i];
		i -= lowbit(i);
	}
	return s;
}
int main()
{
	int a, b;
	while (scanf("%d", &n), n)
	{
		memset(c, 0, sizeof(c));
		for (int i = 0; i < n; i++)
		{
			scanf("%d%d", &a, &b);
			add(a, 1);
			add(b + 1, -1);
		}
		for (int i = 1; i < n; i++)
			printf("%d ", sum(i));
		printf("%d\n", sum(n));
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41863129/article/details/89526695