
树状数组
CHN_JZ
爆0 forever
展开
-
BZOJ 1878 [SDOI2009]HH的项链——离线+树状数组||莫队算法
1878: [SDOI2009]HH的项链题目描述HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答。。。因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。输入第一行:一原创 2017-04-23 14:56:25 · 815 阅读 · 0 评论 -
关于树状数组的姿势
Q:博主为什么突然会来一个这么SB的算法。 A:当然是为了水一篇博客辣 有什么新发现,顺便补上我欠树状数组的一篇总结。树状数组树状数组作为一种数据结构,相比其他数据结构代码清晰简单,这里就不再阐述,它可以用来解决求前缀极值或区间和,并支持插入一个数和区间增减。(来自蒟蒻的)新姿势今天参加了某高校的模拟赛,看当场rank1的代码…… 一个小时后…… 谁来恭喜我发现了一个很有用 (鸡肋)的姿势。当原创 2017-07-03 19:01:02 · 616 阅读 · 1 评论 -
[二维树状数组]BZOJ 1452—— [JSOI2009]Count
题目梗概给出一个N*M的方格,每个方格有一个数字。每次更改某个格子上的数字或询问一个子矩阵的某值的个数。解题思路裸的二维树状数组,对每个值分别开数组记录就可以了。#include<cstdio>#include<cstring>using namespace std;const int maxn=25,maxm=125,tt=45989;struct jz{ int x[maxm][原创 2017-10-06 15:17:34 · 701 阅读 · 0 评论 -
[树状数组]51 Nod 1463——找朋友
题目描述给定:两个长度为n的数列A 、B一个有m个元素的集合K询问Q次每次询问[l,r],输出区间内满足|Bi-Bj|∈K 的最大Ai+Aj解题思路注意这题M的范围是10离线一下,对于每个新加的元素用树状数组暴力维护就可以了。#include<cstdio>#include<algorithm>using namespace std;const int maxn=100005;struct原创 2017-10-29 18:42:57 · 668 阅读 · 0 评论 -
[二分+树状数组]51 Nod 1685——第K大区间2
[二分+树状数组]51 Nod 1685——第K大区间2题目描述定义一个长度为奇数的区间的值为其所包含的的元素的中位数。 现给出n个数,求将所有长度为奇数的区间的值排序后,第K大的值为多少。解题思路二分枚举答案x。考虑如何验证中位数>=x的区间总数是否>=K。构造s[i]s[i]表示前i个数有多少个数>=x>=x。如果一个区间的中位数>=x>=x肯定有(s[R]−s[L−1])∗2>R−L+1(s原创 2017-10-23 18:37:30 · 624 阅读 · 0 评论 -
[树状数组]BZOJ 2028——[SHOI2009]会场预约
题目梗概有两种操作:一种是插入一段区间,并删除与这段区间相交的区间,返回删除区间的个数。另一种是返回目前的区间数。解题思路有一个非常重要的特性是在任何时候区间的末端随区间的始端递增而递增。于是考虑树状数组维护始端个数的前缀和,维护这个就可以二分查找小于等于某个点最近的始端。知道始端的位置后,我们可以得到相应的末端,如果形成相交就删去这个区间(其实就是删去始端)。因为始末端的单调性,当查找出的区间不形原创 2017-10-25 17:01:59 · 609 阅读 · 0 评论 -
[树状数组]51 Nod 1711——平均数
题目描述LYK有一个长度为n的序列a。你只要告诉他所有区间(n*(n+1)/2个区间)中第k大的平均数就行了。解题思路显然要二分,考虑如何验证。sum[R]−sum[L−1]>=x∗(R−L+1)——>sum[R]−x∗R>=sum[L−1]−x∗(L−1)sum[R]-sum[L-1]>=x*(R-L+1)——>sum[R]-x*R>=sum[L-1]-x*(L-1)那么就是求sum[i]−x∗i原创 2017-10-25 17:48:02 · 513 阅读 · 0 评论 -
[树状数组]code[vs] 1082——线段树练习 3
ps:博主又A这种水题显然是为了水blog有新姿势。题目梗概区间加,询问区间和。解题思路什么垃圾,直接线段树。 树状数组也可以区间加的啊,代码短小,常数小。 当然与普通树状数组有所不同。 设a[i]=w[i]−w[i−1]a[i]=w[i]-w[i-1],这样修改区间[L,R][L,R]显然只需要修改a[L],a[R+1]a[L],a[R+1],[1,x][1,x]的原创 2017-07-24 14:55:58 · 615 阅读 · 0 评论