树状数组练习,模版题
#include <cstdio>
#define MAX 100000 + 10
typedef long long LL;
LL a[MAX];
LL lowbit( LL x ) {
return x & ( -x );
}
LL getSum( LL x ) {
LL s = 0;
while( x > 0 ) {
printf( "+%d\n", x );
s = s + a[x];
x = x - lowbit( x );
}
return s;
}
void update( LL x, LL val, LL n ) {
while( x <= n ) {
a[x] = a[x] + val;
x = x + lowbit( x );
}
}
LL getSum2( LL x, LL n ) {
LL s = 0;
while( x <= n ) {
printf( "+%d\n", x );
s = s + a[x];
x = x + lowbit( x );
}
return s;
}
void update2( LL x, LL val ) {
while( x > 0 ) {
a[x] = a[x] + val;
x = x - lowbit( x );
}
}
int main() {
LL n;
while( scanf( "%lld", &n ) != EOF ) {
if( n == 0 ) break;
LL x, y;
for( LL i = 1; i <= n; i++ ) {
a[i] = 0;
}
for( LL i = 1; i <= n; i++ ) {
scanf( "%lld%lld", &x, &y );
//update( x, 1, n );
//update( y + 1, -1, n );
update2( y, 1 );
update2( x - 1, -1 );
}
for( LL i = 1; i <= n; i++ ) {
//if( i == 1 ) printf( "%lld", getSum( i ) );
//else printf( " %lld", getSum( i ) );
if( i == 1 ) printf( "%lld", getSum2( i, n ) );
else printf( " %lld", getSum2( i, n ) );
}
printf( "\n" );
}
return 0;
}