Color the ball 乱搞

思路:

相当于全部区间更新完后再查询

对于区间 l~r 更新时 对数组中 a[l] 加一,a[r+1]减一

这样相当于用a[l]代表这个区间,从左更新时,用一个数加上a[l],那l点对应的区间也得到了更新,r点减一后,停止了对应区间的更新

最后从左往右遍历,令t,每次+a[i] 

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>

using namespace std;
const int maxn = 1e5 + 7;

int n;
int a[maxn];

int main() {

  while(~scanf("%d",&n) && n!=0) {
    memset(a, 0, sizeof a);
    for(int i = 1; i <= n; ++i) {
      int l_, r_;
      scanf("%d%d", &l_, &r_);
      a[l_]++;
      a[r_+1]--;
    }
    int t = 0;
    for(int i = 1; i <= n; ++i) {
      t += a[i];
      printf("%d%c", t, (i == n ? '\n' : ' '));
    }
  }


  return 0;
}

猜你喜欢

转载自blog.csdn.net/xiang_6/article/details/81534102
今日推荐