知识点
这是一个比较零碎的小点,之前并不知道,只会暴力233333
一个数组(a)(假设数组长为(a)),然后数组(a)的下标在([l,r])范围内元素加上/减去一个数(x),可以这样操作:
(a[l]=a[l]+n;a[r+1]=a[r+1]-n)
求操作后的(a[k])即为:
(a[k]=sum_{i=0}^{k}a[i])
相关题目
eg1:HDU 1556 Color the ball (原题戳我~)
Sample Input
3
1 1
2 2
3 3
3
1 1
1 2
1 3
0
Sample Output
1 1 1
3 2 1
代码样例
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <set>
#include <string>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
using namespace std;
typedef long long ll;
const int maxn = 100000 + 10;
int ball[maxn];
int main()
{
int n;
while (cin >> n)
{
if (n == 0)
break;
memset(ball, 0, sizeof(ball));
for (int i = 0; i < n; i++)
{
int a, b;
cin >> a >> b;
ball[a]++;
ball[b + 1]--;
}
for (int i = 1; i <= n; i++)
{
ball[i] += ball[i - 1];
if (i < n)
cout << ball[i] << " ";
else
{
cout << ball[i] << endl;
}
}
}
// system("pause");
return 0;
}