----树状数组
扩展的灰
扩展的灰(Extended Ash)
展开
-
Jzoj5419 筹备计划
题目背景 热烈庆祝北京师范大学附属实验中学成立100周年!问题描述 校庆筹备组的老师们正在寻找合适的地方来举办校庆庆典。 学生们的位置和可以举办庆典的位置在x轴的正半轴取值在[1,n]的整数位置上。 老师们选择的地点是会根据参加典礼的学生位置来决定的,具体来说:定义一个位置的距离和为该位置到所有参加学生的距离之和。如果一个位置的距原创 2017-11-07 08:00:07 · 311 阅读 · 0 评论 -
一些基础算法的模板(持续更新)
更新中//Templates From Extended_Ash/Cooevjnz/JacaJava/Tubbcrafft//To be continued...//Suffix Automationchar str[N]; int s[N][26],mx[N],f[N],sz[N]; int last=1,cnt=1,n,v[N],r[N],ans=0; inlin原创 2017-10-25 22:05:58 · 3734 阅读 · 0 评论 -
Jzoj5456【NOIP2017提高A组冲刺11.6】奇怪的队列
nodgd的粉丝太多了,每天都会有很多人排队要签名。今天有n个人排队,每个人的身高都是一个整数,且互不相同。很不巧,nodgd今天去忙别的事情去了,就只好让这些粉丝们明天再来。同时nodgd提出了一个要求,每个人都要记住自己前面与多少个比自己高的人,以便于明天恢复到今天的顺序。但是,粉丝们或多或少都是有些失望的,失望使她们晕头转向、神魂颠倒,已经分不清楚哪一边是“前面”了,于是她们可能是记原创 2017-11-06 16:57:31 · 486 阅读 · 0 评论 -
Jzoj3542 冒泡排序
下面是一段实现冒泡排序算法的C++代码:for (int i=1;i for (int j=1;jif (a[j]>a[j+1]) swap(a[j],a[j+1]);其中待排序的a数组是一个1~n的排列,swap函数将交换数组中对应位置的值。对于给定的数组a以及给定的非负整数k,使用这段代码执行了正好k次swap操作之后数组a中元素的值会是什么样的呢?是一个模原创 2017-12-02 22:54:10 · 361 阅读 · 0 评论 -
Jzoj1020 逆序对统计 ≈ Bzoj3295 动态逆序对
Jzoj1020:Dramatic是在太菜了。最近,他学习了有关逆序对的知识,并且掌握了计算一个序列逆序对个数的高效算法,因此,他兴冲冲的跑去向YY牛炫耀。YY牛对此不屑一顾,并打击Dramatic说:“这是在太小儿科了!”Dramatic很不甘心,于是在他的强烈要求下,YY牛给他出了一道跟逆序对有关的“难题”(显然,对于YY牛来说是简单题)。题目是这样的:YY牛首先给Dramatic一个长原创 2017-12-11 21:08:08 · 617 阅读 · 0 评论 -
Jzoj5605 Zkb
给定一个长度为 n 的正整数序列 a 1 ...a n . 现在有 m 次操作, 分为两种:• 1 l r t: 将区间 [l,r] 降序排序 (t = 0) 或升序排序 (t = 1)• 2 l r: 询问区间 [l,r] 内元素之积的十进制下最高位雅礼集训的题目,当时因为空间开小了爆零了先考虑一下询问,我们发现并不好直接做,所以可以对原数取log10,最后询问区间和的小数部分即可让后现在问题就...原创 2018-04-17 20:17:32 · 311 阅读 · 2 评论 -
Jzoj5608 Subset
这道题非常有意思首先我们可以发现,对于一个合法的三元组我们可以找到一个大小小于3的下标集合S与之对应那么我们就来考虑找到所有合法的这样的S当|S|=1时,显然都是成立的当|S|=2时,我们只需要保证s中两个元素i,j不满足a[i]考虑计算不满足的方案,可以用cdq分治+fenwick完成当|S|=3时,我们直接计算比较困难,我们考虑两种不合法的情况1.存在一个元素x满足原创 2018-04-20 20:16:45 · 256 阅读 · 0 评论 -
CDQ分治&整体二分九连测
整体二分好难a CDQ分治&整体二分九连: A[适者] 先来一个不是cdq分治的题(虽然也可以用分治做) 首先先来考虑按照什么顺序来搞掉这些机甲 对于两个相邻的机甲i,j,先i后j的代价是Ai∗Di+(Di+Dj)∗AjAi∗Di+(Di+Dj)∗AjA_i*D_i+(D_i+D_j)*A_j 那么如果i应该比j先消灭就有 Ai∗Di+(Di+Dj)∗Aj<A...原创 2018-08-19 21:32:06 · 571 阅读 · 0 评论 -
51Nod1680 区间求和
.题目点这里大概是这么一个问题∑k=1n∑i=1n−k+1∑j=i+k−1n区间前k大元素和\sum_{k=1}^n\sum_{i=1}^{n-k+1}\sum_{j=i+k-1}^n区间前k大元素和k=1∑ni=1∑n−k+1j=i+k−1∑n区间前k大元素和观察式子并加以变形=∑i=1n∑j=in∑k=1j−i+1区间前k大元素和=\sum_{i=1}^n\sum_{j=i}^n...原创 2018-11-02 21:29:37 · 308 阅读 · 0 评论 -
Jzoj4792 整除
给你一个1~n的排列A,询问一些区间内有多少对x,y使得A[x]|A[y]我们考虑将所有的询问按照r排序,让后分成两部分计算:1.A[i]|A[j] 且i>j2.A[i]|A[j] 且i这里只考虑第一种,第二种将所有询问对称翻转即可我们建立一个树状数组,我们令i=1~n每次将考虑A[i]的倍数,若kA[i]的位置j在i之前,我们就在树状数组中把s[j]+1那么显然,对于原创 2017-10-26 21:14:19 · 369 阅读 · 0 评论 -
Jzoj5431 序列操作
一开始有n个非负整数h[i](1问最多可以进行多少轮操作后无法操作(即没有c[i]个大于零的数)考场上脑抽认为先减小的会更优(很明显先减大的会更优啊!!!!!)考虑怎么维护,可以用splay然而正常人都用BIT因为100W两个log不会超时(其实是会的不过jz跑得快)先将所有数大到小排序丢入BIT中每次找出第c[i]个数,将所有大于ci的都减一,等于c[i]的取最后的那原创 2017-11-08 21:04:58 · 359 阅读 · 0 评论 -
Jzoj4747 被粉碎的线段树
额这个题么有一个很关键的点:结点个数依然为2N-1(证明可以看sam的讲稿)不难发现以下性质:区间定位个数+区间所覆盖的节点个数=2*区间长度所以问题变为,一个区间覆盖了多少个节点?我们可以求出所有的节点,然后这个问题就是一个二维偏序计数问题了具体用离线+按照r排序套上树状数组即可#include#includeusing namespace std;inline原创 2017-10-23 19:48:31 · 401 阅读 · 0 评论 -
Jzoj1277最高的奶牛
给你一个序列s和n个限制,(a,b)表示s[a]这不是裸的差分约束吗哈哈哈哈 诶TLE了怎么破认真观察发现:对于每个限制,要么不相交,要么包含,所以对于一组询问(a,b),将(a,b)内的数全部减掉1即可,可以用前缀和不过记得判重。。。这个很坑#include#includeusing namespace std;set f[10010];int n,m,h,k,s[1原创 2017-09-19 20:38:01 · 429 阅读 · 0 评论 -
Jzoj3518 进化序列
Abathur采集了一系列Primal Zerg 的基因样本,这些基因构成了一个完整的进化链。为了方便,我们用A0,A1...An-1 这n 个正整数描述它们。一个基因Ax 可以进化为序列中在它之后的基因Ay。这个进化的复杂度,等于Ax | Ax+1...| Ay的值,其中| 是二进制或运算。Abathur 认为复杂度小于M 的进化的被认为是温和的。它希望计算出温和的进化的对数原创 2017-09-26 21:44:39 · 373 阅读 · 0 评论 -
Jzoj3717【NOI2014模拟7.2】火车
很显然的树剖题目嘛,加上个区间打标记即可,可以用树状数组注意数据很坑,dfs爆栈,所以要从最中间开始dfs原创 2017-09-27 21:27:48 · 663 阅读 · 0 评论 -
Jzoj4711 Binary
如果没有这个+x的话应该都能想到是按位拆开每一位处理吧现在考虑这个+x如何处理一个数v加上x,如果有(v+x)%2^i>2^(i-1)的话,那么就必然第i位为1所以我们考虑,对于每一个询问的y,若有y&(1mod (1具体实现可以用fenwick树(一个小小的常熟优化,不要用%2^i而要用&(2^i-1))#pragma GCC opitmize("O3")#prag原创 2017-10-14 22:09:04 · 293 阅读 · 0 评论 -
Jzoj5422 天才绅士少女助手克里斯蒂娜
居然是向量叉乘!考场上忘了怎么叉乘了。。。考完后发现可以推一波式子Σ(aj*bk-ak*bj)^2{1Σak^2)*(Σbk^2)-(Σak*bk)^2 {1让后用BIT维护a的平方和,b的平方和和ab的和就好了#pragma GCC optimize("O3")#pragma G++ optimize("O3")#include#include#include#de原创 2017-11-07 17:09:04 · 1267 阅读 · 0 评论 -
Jzoj4738 神在夏至祭降下了神谕(GOSICK系列)
我们先写裸的dp,设φ[i]表示长度为i的划分方案数,φ(0)=1有φ(i)=Σφ(j) (|sum[j,i]|sum用前缀和预处理就好(将0视为-1)那么我们考虑用树状数组快速更新,我们发现,若s[j](前缀和)在[s[i]-k,s[i]+k]中就可以合法转移所以我们考虑将φ[i]的值插入到s[i]的位置上,每次更新即可注意s[i]可能为负数,要开两倍长度#include原创 2017-10-23 07:15:01 · 618 阅读 · 0 评论 -
Jzoj4737 金色丝线将瞬间一分为二(GOSICK系列)
继续上一篇那套题可以将x,y宙分开讨论,对于每一维维护一个数据结构求出所有比之小的部分的和和比之大的部分的和所以我们先将这些点分别按x,y轴排序,得到rankx和ranky之后用树状数组即可#pragma GCC optimize("O3")#pragma G++ optimize("O3")#include#include#include#define LL l原创 2017-10-22 22:45:56 · 758 阅读 · 0 评论 -
Bzoj2434 阿狸的打字机
纪念一次AC,水一篇blog又是喜闻乐见的广义SAM题辣题意:给一个trie,每次问询一个串在另一个串出现的次数思路:建立广义SAM,离线所有询问,每次讲一个主串在fail树上的节点+1,处理询问就用fenwick维护子树和这里注意,1.广义SAM要用bfs建2.每次从一个主串到下一个时,不要整个都减掉而是要在LCA处会和,这样复杂度就是对的代码有点长但是很好打#include&...原创 2018-11-26 21:12:32 · 261 阅读 · 0 评论