树状数组
Joey丶sunk
古今成大事者 不惟有超世之才 亦必有坚忍不拔之志
展开
-
UVA - 1513 Movie collection 树状数组
这个题要用到树状数组 如果没学过,可以看一下百度百科那张线性图表,还有这个人的博客也不错:http://blog.csdn.net/ljd4305/article/details/10101535如果会了树状数组那么这个题就很裸了 下面代码:#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #i原创 2017-08-18 17:26:15 · 298 阅读 · 0 评论 -
Educational Codeforces Round 54 E - Vasya and a Tree 树上:离线+dfs+树状数组
题意: 给定一棵包含n个结点的树,开始每个结点权值为0,现在有q个操作,每个操作包含 v, d, x,表示第v号结点,以及再往下(对于树:他的孩子方向)遍历d层,访问到的结点权值都加上x; 输出所有结点的权值 思路: 一下想到的就是区间更新,单点查询,想写个树剖来着,感觉有点麻烦,然后就想到了树状数组很快的那个区间更新,前缀和当单点查询的操作, 然后再想想就想到了把所有操作离线出来,然后...原创 2018-11-13 12:14:41 · 201 阅读 · 0 评论 -
Educational Codeforces Round 53 (Rated for Div. 2) D. Berland Fair 二分+树状数组 O(n*logn*logn) 思路
题意: 给定n个店铺,每个店铺买的东西有个价格a_i,数量有无限个,然后主人公从1号开始走到n号,每走到一个店铺,只要他的钱大于价格,他就要买,然后重复上述过程,直到他不能购买,输出他能买的物品件数; 思路: 直接模拟的话,必然不可行,但是我们知道模拟时到达一个位置后买不起这里的东西就可以把这个店铺给踢了(好坏!),然后继续后面的过程,如果要是我的钱足够买完一轮的话,我会除一下,取下膜,这样...原创 2018-11-03 13:39:12 · 242 阅读 · 0 评论 -
Codeforces Round #512 F. Putting Boxes Together 推导+树状数组+带权中位数
题意: 给定n个物品,每个物品有一个位置和权值,移动一个物品的花费是 移动距离*物品权值, 问:把一部分物品合并成相邻的一段,需要的最小花费 思路: 最优策略是某个物品不动,这个物品左边的依次往右移动,其右边的物品依次往左移动,(下文中的上述情况) 反证一下:假设最优情况下不动的这个物品往右移动了,那他和他左边的物品相当于上述情况下增加了他们权值和的花费,而右边的物品减少了权值和的花费,...原创 2018-10-16 19:04:11 · 226 阅读 · 0 评论 -
Aizu - 1386 Starting a Scenic Railroad Service 思路+树状数组
题意: 给定n个乘客的乘车区间,问他们乘车最坏情况下需要座位数和最优情况下需要座位数 思路: 这个最坏情况是每个人任选座位,不管有冲突的怎么选,每个人都能做得下;这里我们考虑的是每个人乘车区间会跟别的几个人冲突,那加上他自身的个数选个最大的就是至少需要的座位数 显然不能n^2求解,所以我们按区间左值从小到大排序: 先从左往右遍历,每个区间的右值更新到树状数组里,对于当前区间,我们只要...原创 2018-08-28 12:57:47 · 315 阅读 · 0 评论 -
POJ - 1990 MooFest 树状数组
题意: 又是农夫约翰和他的牛, 给定n个牛,每个牛有个听力下限,和位置,他们之间互相说话会有一个 值 = max(听力下限)* 距离 思路: 用两个树状数组,分别维护 (前面比他位置小的数和比他大的数的 个数) 和 (所有位置的和) 详见题解 #include #include #include #include #include #include #include原创 2017-11-27 22:12:27 · 173 阅读 · 0 评论 -
牛客练习赛7 E 珂朵莉的数列 (只有思路)
当时没想到用 大数,没过,,只说一下思路吧 首先 枚举所有子集分别找逆序对数肯定不行 然后可以想到每个逆序对可能会对很多个区间有贡献, 问题转化成我们找到一个逆序对ai-aj,看他为多少个区间提供了贡献,,也就是有多少个区间包含了 ai - aj 这个逆序对; 我们只要找到每一个逆序对的i-j这两个位置就行了,i aj ,那么这个逆序对的贡献就是 i * (n -原创 2017-12-02 13:39:35 · 386 阅读 · 0 评论 -
URAL - 1090 In the Army Now (树状数组或归并排序)此处树状数组
题意: 有 k 行士兵,每行 n 个人,求得每一行逆序对数,输出最大的那一行的行标,逆序对数相同输出标号最小的 这里用 树状数组求逆序对数(对于每个数,他前面出现的比他大的个数) 归并排序也可以求逆序对,可以自行补充 #include #include #include #include #include #include #include #include #includ原创 2017-11-06 20:21:19 · 204 阅读 · 0 评论 -
Queries Gym - 100741A 树状数组
维护 m 个 树状数组、 #include #include #include #include #include #include #include #include #include #include #include #include #include // cout << " === " << endl; using namespace std; type原创 2017-08-22 21:49:39 · 261 阅读 · 0 评论 -
Educational Codeforces Round 54 (Rated for Div. 2) A B C D E题解
这些题目挺有意思,起码我都错过,可能这两天精力有点不足,脑子不太够用??? A题链接:http://codeforces.com/contest/1076/problem/A 题意:给定一个字符串,最多可以删掉一个字符,使得字典序最小; 思路:首先跟原串比较的话,某一个字符大于后面相邻的字符的话,删去这个字符,显然这样字典序就会变小了,我们也知道,如果有多个这样的字符对的话,删掉第一个...原创 2018-11-13 12:37:12 · 235 阅读 · 2 评论