LA 4329 BIT 分治】的更多相关文章

#include <cstdio> #include <queue> #include <cstring> #include <iostream> #include <cstdlib> #include <algorithm> #include <vector> #include <map> #include <set> #define lowbit(x) x&-x using namesp…
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2330 参考资料:<算法入门经典训练指南>刘汝佳 P197 这本书上面写的题目大意.解题思路都写出来了. 在这我贴上自己的 AC代码: #include<stdio.h> #include<string.h> #define PEOPLE 2…
对于我这样一名脑残ACMer选手,这道题看了好久好久大概4天,终于知道怎样把它和“树状数组”联系到一块了. 树状数组是什么意思呢?用十个字归纳它:心里有数组,手中有前缀. 为什么要用树状数组?假设你要储存一段数字的前缀和,还要动态修改这些数字.怎么办? 通常的想法就是用数组a[]保存所有的数字,再用数组s[]保存每一位上的前缀和. ;i<=n;i++){ s[i]=s[i-]+a[i]; } 这样有一个弊端,就是当你动态修改a[]数组中的数字的时候,维护s[]数组的代价太高了,最坏可达O(N),…
题目传送门 题意:训练指南P197 分析:枚举裁判的位置,用树状数组来得知前面比它小的和大的以及后面比它小的和大的,然后O (n)累加小 * 大 + 大 * 小 就可以了 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5 + 5; const int M = 2e4 + 5; struct BIT { int c[N], sz; void init(int n) { mem…
题目链接: 刘汝佳,大白书,P197. 枚举裁判的位置,当裁判为i时,可以有多少种选法,如果已经知道在位置i之前有ci个数比ai小,那么在位置i之前就有i-1-ci个数比ai大. 在位置i之后有di个数比ai小,那么在位置i之后就有n-i-di个数比ai大. 这样,选法数有ci*(n-i-di)+di*(i-1-ci). 注意到ai的值各不相同且ai的值最大不超过10^5,那样就可以用v[a[i]]表示a[i]是否已经存在,这样当顺时针扫描的时候,每次更新v[a[i]] = 1;//表示已经存在…
第一次敲树状数组  因为一个小错误 wa了 n 多遍  终于ac  太不容易了 /************************************************************************* > Author: xlc2845 > Mail: xlc2845@gmail.com > Created Time: 2013年11月07日 星期四 11时05分22秒 *********************************************…
第一次写树状数组,感觉那个lowbit位运算用的相当厉害. 因为-x相当于把x的二进制位取反然后整体再加上1,所以最右边的一个1以及末尾的0,取反加一以后不变. 比如1000取反是0111加一得到1000,这样与运算以后不变 最右边的1左边部分取反,加一不会影响左半部分,所以与运算以后全部为0 对于这道题来说貌似不是很容易能联想到树状数组 注意题中说了每个人的技能值互不相同. 从左往右扫描每个a[i],另x[a[i]] = 1,然后统计x[1]...x[a[i]-1]的和就是第i个人左边技能值比…
题目描述: N <tex2html_verbatim_mark>(3N20000) <tex2html_verbatim_mark>ping pong players live along a west-east street(consider the street as a line segment). Each player has a unique skill rank. To improve their skill rank, they often compete with…
https://vjudge.net/problem/UVALive-4329 题意: 一条大街上住着n个兵乓球爱好者,经常组织比赛切磋技术.每个人都有一个不同的技能值ai.每场比赛需要3个人:两名选手,一名裁判.他们有一个奇怪的规定,即裁判必须住在两名选手的中间,并且技能值也在两名选手之间.问一共能组织多少种比赛. 思路: 想了好久才明白二叉索引树在这里的运用. 首先,就像训练指南上说的,考虑第i个人当裁判的情形.假设a1到ai-1中有ci个比ai小,那么就有(i-1)-ci个比ai大:同理,…
题意:从左到右给你n个不同的数值,让你找出三个数值满足中间的数值在两边的数值之间的个数. 析:题意还是比较好理解的,关键是怎么求数量,首先我们分解一下只有两种情况,一个是左边<中间<右边,另一种是左边>中间>右边(因为数值都不相同嘛). 我们考虑第i个数值在中间的情况.假设a1到ai-1中有ci个比ai小的,那么就有(i-1)-ci个比ai大的(因为不包括第i个数).同理,假设有ai+1到an中有di个比ai小,那么有(n-i)-di个比ai大,那么一共就有ci(n-i-di) +…