求点呗覆盖的次数。单纯的树状数组。
// File Name: hdu1556.cpp
// Author: Toy
// Created Time: 2013年03月14日 星期四 11时05分24秒
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cctype>
#include <cmath>
#include <string>
#include <algorithm>
#include <cstdlib>
#include <iomanip>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#define L(x) x << 1
#define R(x) x << 1 | 1
using namespace std;
int ar[100010], Case, a, b;
int Lowbit ( int t ) {
return t & ( -t );
}
int sum ( int i ) {
int s = 0;
for ( ; i > 0; s += ar[i], i -= Lowbit ( i ) ) ;
return s;
}
void add ( int i, int v ) {
for ( ; i <= Case; ar[i] += v, i += Lowbit ( i ) ) ;
}
int main ( ) {
while ( scanf ( "%d", &Case ) != EOF && Case ) {
memset ( ar, 0, sizeof ( ar ) );
for ( int i = 1; i <= Case; ++i ) {
scanf ( "%d%d", &a, &b );
add ( a, 1 );
add ( b + 1, -1 ); //第一次一更新一遍,要减去第一次更新的点
//add ( a, 1 );
}
printf ( "%d", sum ( 1 ) );
for ( int i = 2; i <= Case; ++i )
printf ( " %d", sum ( i ) );
printf ( "\n" );
}
return 0;
}