DS-树状数组
ljq真的不能再吃了
珍惜每一天
展开
-
POJ 1990 MooFest 树状数组
MooFestTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 9189 Accepted: 4158DescriptionEvery year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gathering of cows fro...原创 2018-06-14 19:06:22 · 131 阅读 · 0 评论 -
【Codeforces 296 C Greg and Array 】
CF296C题意 给你 n 个数组m个区间加操作k个属于m的一段区间 代表执行这一段区间个区间加操作问你最后这n个数字会变成多少那么我们用两个树状数组 首先统计每个区间加被加了多少次然后再遍历这些区间加 执行他们的次数 * 他们的值的区间加操作就行了/* if you can't see the repay Why not just work step by step...原创 2019-04-22 11:28:13 · 225 阅读 · 0 评论 -
【Codeforces Beta Round #57 (Div. 2) E. Enemy is weak】
Codeforces 61E题意 就是问你有多少对 i > j > k 使得 arr[i] > arr[j] > arr[k]那么我们枚举 j左边有多少个比他大的 用树状数组维护右边有多少个比他小的 用树状数组维护乘起来即可/* if you can't see the repay Why not just work step by step...原创 2019-05-02 17:03:08 · 105 阅读 · 0 评论 -
【HDU 4911 Inversion】 树状数组
HDU 4911题意就是叫你求逆序数 然后可以交换k 次 问你最少剩多少逆序数其实就是求个逆序数 求个 max(0,逆序数-k)/* if you can't see the repay Why not just work step by step rubbish is relaxed to ljq*/#include <cstdio>#in...原创 2019-05-02 19:14:39 · 320 阅读 · 0 评论 -
【HDU 5147 Sequence II 】 树状数组
HDU 5147题意 问你有多少对关系满足 i < j < k < larr[i]<arr[j] ,arr[k]<arr[l]那么我们从前到后维护一个满足arr[i]<arr[j]的前缀和从后到前维护一个 arr[k] < arr[l]的后缀和那么对于每个答案 我们只需要统计 (pre[i]-pre[i-1])*suf[i+1] 即可我们只需要...原创 2019-05-02 19:36:51 · 100 阅读 · 0 评论 -
【HDU 3887 Counting Offspring】dfs序 +树状数组
HDU 3887他要统计子树内小于他的数有多少个那么我们处理好询问空间然后排个序然后用树状数组维护比他小右多少个答案就是 getsum(arr[i].id) - 1 (不计自身)/* if you can't see the repay Why not just work step by step rubbish is relaxed to ljq*/...原创 2019-05-02 22:53:15 · 137 阅读 · 0 评论 -
【HDU 3015 】Disharmony Trees
hdu3015题意就是两次离散化问你 min(b[i],b[j])*abs(a[i]-a[j]) 所有的和为多少我们用两个树状数组 一个维护个数一个维护和这样就能ac这题了这题的离散化方式可以学一下哦#include <cstdio>#include <iostream>#include <cmath>#include <queue&g...原创 2019-05-02 23:47:18 · 140 阅读 · 0 评论 -
【Codeforces 6318 】02多校补题
HDU 6318求逆序对个数 因为一对逆序数可以通过一次交换消除所以答案为 min(x,y)*逆序对个数/* if you can't see the repay Why not just work step by step rubbish is relaxed to ljq*/#include <cstdio>#include <cs...原创 2019-07-17 20:20:22 · 85 阅读 · 0 评论 -
【2019牛客暑期多校训练营(第九场)H Cutting Bamboos】莫队 + bit +二分
H知道题意以后离线来做两个树状数组 一个存高度 一个存个数那么你二分的是mid你就要MID = ceil(向上取整)mid, 答案为高度超过这个MID的和 减去有多少个高度超过MID的竹子个数*mid 进行二分check 一开始ans没有 = 0.0 一直WA后来才知道二分有问题 好在队友的帮助下 解决了此题#include <map>#include <set&g...原创 2019-08-15 18:04:31 · 169 阅读 · 0 评论 -
【HDU 1394】Minimum Inversion Number 最小逆序对
HDU 1394对于逆序对我们可以用树状数组nlogn求出来 但是如果要进行n次就会超时所以我们了解到性质 因为你是按顺序放在最后一个那么你每次放的时候 会让 getsum(arr[i]-1)个元素少一个逆序对的贡献会新加 n-getsum(arr[i]) 的逆序对贡献所以你只要把这两个都求一下 取个minn即可时间复杂度 2*O(nlogn)#include <cstdio&...原创 2019-04-09 18:21:58 · 302 阅读 · 0 评论 -
【COGS 2964】 数列操作η 线段树
题目描述:题意 给你n长度的b 数组 b数组是 [1,n]的全排列 然后a数组初始化为0 Q个操作add l rquery l radd操作是把a数组区间加1query操作是查询l−r的⌊a[i]b[i]⌋query操作是查询l-r的\lfloor \frac{a\left[ i \right]}{b\left[ i \right]} \rfloor query操作是查询l−r的⌊b...原创 2019-04-12 12:30:55 · 256 阅读 · 0 评论 -
【HDU 5592 ZYB's Premutation】 根据逆序对数求位置 二分 树状数组
HDU 5592这题不过是绕个弯子求前面有多少人比你小 然后问你这个人的位置我们从右往左 因为最后一个人的位置是能直接确定的 然后右边比他小的人就是getsum(arr[i])左边比他小的人 是 arr[i]-arr[i-1] (有多少个比他大) 用 i - 1减去他 就是有多少个比他小然后getsum(mid) + 多少个比他小 与 mid - 1 比较 去二分因为getsum(mii...原创 2019-04-10 15:38:45 · 112 阅读 · 0 评论 -
poj 3321 : Apple Tree (树状数组)
Apple TreeTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 33689 Accepted: 10092DescriptionThere is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree....原创 2018-07-13 22:06:38 · 151 阅读 · 0 评论 -
POJ 2481 cows 数组数组
CowsTime Limit: 3000MS Memory Limit: 65536KTotal Submissions: 21740 Accepted: 7361DescriptionFarmer John's cows have discovered that the clover growing along the ridge of the hill (which we can think ...原创 2018-07-13 22:09:02 · 148 阅读 · 0 评论 -
POJ 2182 二分+树状数组
Lost CowsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 12536 Accepted: 8037DescriptionN (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular display of poor ...原创 2018-07-13 22:12:58 · 189 阅读 · 0 评论 -
HDU 5700 树状数组 二分
题目连接 HDOJ 5700题意 中文题意做法 枚举左端点如果小于等于k 那我们直接continue 找满足条件的右端点出现的次数大于等于k次的 进行二分求值/*hdoj 5700*/#include <cstdio>#include <cstring>#include <iostream>#include <cmath>...原创 2018-09-13 19:54:06 · 135 阅读 · 0 评论 -
hdu 5877 树状数组 + dfs序
题目链接HDOJ 5877题意就是给你一棵树 定义一个关系为一个祖先点 与 其所有子孙满足权值相乘小于等于k的关系对有多少个我们不难想到这类题目适合用dfs序去解决 也就是遍历到一个子孙点的时候 去找他的祖先点 有多少个是比 k/a[u]要小的那么我们如何利用树状数组呢?不能直接建dfs序的树状数组 我们要在dfs的过程中 不断的压入子孙进树状数组然后统计满足条件的k/a[u] 小...原创 2018-09-14 13:38:57 · 202 阅读 · 0 评论 -
hdoj 5493 树状数组 二分加树状数组
题目链接 hdoj 5493题意 t组样例 给出n个人的身高 和左边或者右边比他高的人有k个我们怎么分析呢? 首先 我们按照身高排序 当排到第i个人的时候 说明 后面的人一定比他高 前面的人不可能比他高 所以要满足这个k他在后面没排的人里面要吗是 第 n - i - k + 1 名(右边有k个) ,要吗是 k + 1名(左边有k个) 所以我们又想要字典序最小 我们只需要每次都去min这两...原创 2018-09-14 13:50:03 · 241 阅读 · 0 评论 -
codeforces 620 E 线段树压位加建树
codeforces 620 E cf620E题意 一颗树 更新祖先 和其子孙的颜色 , 询问祖先里面有多少个颜色统计区间颜色我们容易算 问题就是如何化成区间 利用dfs序 找到出现的顺序 建树然后按照统计颜色的做法做久好了 我一开始WA是因为60个颜色1<<60忘记加 ll 所以wa了 这也是这类题目的一个wa点 需要注意/*codeforces 620E*/...原创 2018-09-14 13:53:43 · 139 阅读 · 0 评论 -
hdu 5700 区间交 树状数组
HDU 5700中文题意没啥好说的我们要怎么做呢 暴力枚举左边的点 然后二分树状数组找到符合条件的最大右坐标我们就可以进行取maxx操作了/*hdoj 5700*/#include <cstdio>#include <cstring>#include <iostream>#include <cmath>#include ...原创 2018-09-14 15:09:57 · 182 阅读 · 0 评论 -
【CF293E. Close Vertices】点分治 + 树状数组
CF293E现在有一棵树,每条边的长度都为1,然后有一个权值,求存在多少个(u,v)点对,他们的路径长度 <= l, 总权重 <= w.观察到边权长度都是 1 所以我们可以对路径的长度建立树状数组每次查询区间内满足的w即可//现在有一棵树,每条边的长度都为1,然后有一个权值,求存在多少个(u,v)点对,他们的路劲长度 <= l, 总权重 <= w./* if...原创 2019-09-16 20:51:17 · 168 阅读 · 0 评论