经典的树状数组。
// File Name: hdu1541.cpp
// Author: Toy
// Created Time: 2013年03月05日 星期二 18时41分34秒
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cctype>
#include <cmath>
#include <string>
#include <algorithm>
#include <cstdlib>
using namespace std;
int ar[32011], n, x, y, level[15010];
int Lowbit ( int t ) {
return t & ( -t );
}
void add ( int i, int v ) {
while ( i <= 32001 ) {
ar[i] += v, i += Lowbit ( i );
}
}
int sum ( int i ) {
int s = 0;
while ( i > 0 ) {
s += ar[i], i -= Lowbit ( i );
}
return s;
}
int main ( ) {
while ( scanf ( "%d", &n ) != EOF ) {
memset ( level, 0, sizeof ( level ) );
memset ( ar, 0, sizeof ( ar ) );
for ( int i = 1; i <= n; ++i ) {
scanf ( "%d%d", &x, &y );
++x;
add ( x, 1 );
level[ sum ( x ) - 1 ]++;
}
for ( int i = 0; i < n; ++i )
printf ( "%d\n", level[i] );
}
return 0;
}
本文通过HDU 1541题目介绍了树状数组的基本原理和实现方法,展示了如何使用树状数组进行区间求和及更新操作,并提供了一个完整的C++代码示例。
&spm=1001.2101.3001.5002&articleId=8639290&d=1&t=3&u=505dbbc2e96143fb88159818a7dcdbbe)
478

被折叠的 条评论
为什么被折叠?



