
树状数组
stdwal
天演在化,功成在学。知海无涯,见花问道。
展开
-
POJ1990-MooFest
这道题靠暴力朴素的n^2算法显然是过不了的,因此我们要对算法进行优化,先将读入的每个牛的信息按音量进行排序,这样每头牛只需将比它小的牛的距离总和加起来乘以牛的音量即可。借助两个树状数组,一个维护牛的数量,另一个维护牛的坐标和,这样每次计算出一头牛的左右两边的牛的距离总和并与牛的音量相乘再将牛加入树状数组,反复即可。#include <cstdio>#include <algorithm>using原创 2016-08-22 13:15:25 · 579 阅读 · 0 评论 -
POJ2155-Matrix
楼教主的题被我做出来啦! 有一个01矩阵,两个操作:翻转从(x1, y1)到(x2, y2)的矩阵,查询(x, y)的值。 用二维树状数组记录每一个点的变换次数,按照奇偶性即可得到某个点现在的值。 变换时必须要从某点(x, y)更新到(n, n),以便更新后面的树状数组,因此,将(x1, y1)和(x2, y2)将矩阵分成四个区域,然后变换即可。#include <cstdio>#inclu原创 2016-08-22 16:40:38 · 372 阅读 · 0 评论 -
POJ2481-Cows
首先将所有的区间按终点从大到小排序,如果终点相同则按起点从小到大排序,然后用树状数组维护起点总数即可。 由于已经按照终点排序,已经插入区间的终点一定大于当前的区间,因此只需查找起点比当前起点小的区间即为所要求的答案。#include <cstdio>#include <cstring>#include <algorithm>const int maxn = 100000+1;#define l原创 2016-09-24 14:45:29 · 313 阅读 · 0 评论 -
Ural1028-Stars
树状数组的简单运用。#include <cstdio>#include <algorithm>using namespace std;const int maxn = 15000 + 5;const int INF = 32000 + 5;typedef pair<int, int> P;P pos[maxn];int bit[INF];int level[maxn];int n;inline原创 2016-11-21 09:37:49 · 464 阅读 · 0 评论 -
Ural1470-UFOs
维护一个三维树状数组即可。 唯一的难点在于如何分解立方体从而得到从(x1, y1, z1)到(x2, y2, z2)的元素和。#include <cstdio>const int maxn = 128 + 5;long long bit[maxn][maxn][maxn];int n;int lowbit(int x) { return x & -x;}void add(int x, i原创 2016-11-21 21:12:25 · 402 阅读 · 0 评论 -
Ural1521-War Games 2
给定n和k求约瑟夫环中每次出圈的人的编号。 利用树状数组可以得到每个人的相对编号(在他之前有几个人)。 每次通过二分查找找到对应编号出圈的人,然后在他们的编号位置上-1.#include <cstdio>#include <vector>using namespace std;const int maxn = 100000+5;int fw[maxn];int n, k;inline int原创 2016-11-22 15:56:17 · 627 阅读 · 0 评论 -
Ural1090-In the Army Now
有k行n列,求逆序对数最多的那一行的序号。#include <cstdio>#include <cstring>const int maxn = 10000 + 5;const int maxk = 20 + 5;int a[maxk][maxn];int fw[maxn];int n, k;inline int lowbit(int x) { return x & -x;}void原创 2016-11-22 16:37:19 · 370 阅读 · 0 评论 -
Ural1523-K-inversions
给定n个数字和一个k,求长度为k的下降子序列的个数。 dp[i][j]表示以a[i]为结尾,长度为j的下降子序列的个数。 因此: dp[i][j] = Sigma(dp[k][j-1]),其中k属于[1, i),且a[k] > a[i]. 维护一个树状数组以便于快速求出所有满足条件的dp[k][j-1]的总和。 先初始化dp数组,将dp[i][1]置为1,然后,更新dp[i][j],再在树原创 2016-11-21 11:39:55 · 457 阅读 · 0 评论