数据结构
zhouyuyang233
此乃ZJ之蒟蒻也
望大牛勿喷
我等蒟蒻感激不尽
展开
-
bzoj3110: [Zjoi2013]K大数查询
传送门 外层权值线段树套内层普通线段树水过。#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath>#include<cstring>#include<algorithm> #define N 20000005#define u32 unsigned intusing namespace std;u32原创 2017-04-05 09:33:21 · 257 阅读 · 0 评论 -
bzoj1273: [BeiJingWc2008]序列
传送门 首先观察到是全局加,可用变量X表示。 然后对于依次询问,大力转移一法询问范围。 然后随便用一下线段树就OK辣。#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define N 65535using namespace原创 2017-05-22 21:27:25 · 274 阅读 · 0 评论 -
bzoj1858: [Scoi2010]序列操作
传送门 线段树裸题。 每个节点维护0/1的个数,覆盖标记,取反标记,在左边/右边连续0/1的个数。 下传上传自己xjb乱搞一下就可以了。#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>using namespace std;s原创 2017-06-28 21:04:51 · 232 阅读 · 0 评论 -
bzoj1861: [Zjoi2006]Book 书架
传送门 splay模板题。 不会splay的可以看一下这篇#include<cmath>#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#define N 160160#define bug printf("sb\n");using namespace s原创 2017-06-29 21:14:01 · 243 阅读 · 0 评论 -
bzoj1862: [Zjoi2006]GameZ游戏排名系统
传送门 又是splay模板题 对于字符串我们可以采用哈希值进行比较。 当哈希值相同时全文比较。#include<cmath>#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#define mo 985003#define N 250250 using n原创 2017-06-29 21:19:54 · 267 阅读 · 0 评论 -
bzoj1818: [Cqoi2010]内部白点
传送门 首先没有-1的情况(十分显然)。 于是答案就是线段交点个数。 我们可以1求出所有横线竖线,共2*n条。 然后我们按照棱线扫描,竖线在树状数组上维护。 xjb乱搞以下就可以了。#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<iostream>#include<algorith原创 2017-06-20 21:41:56 · 384 阅读 · 0 评论 -
bzoj1819: [JSOI]Word Query电子字典
传送门 大力建出Trie之后转移。 也就是三种情况:跳过该字符。跳过该Trie数节点,向兄弟节点跳。 注意一个字符串可能有多种方法和字典中字符串匹配。#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>#define N 20000原创 2017-06-20 21:48:18 · 340 阅读 · 0 评论 -
bzoj1798: [Ahoi2009]Seq 维护序列seq
传送门 裸的线段树,每个节点打标记add和mul,注意下传即可。#include<cmath>#include<cstdio> #include<cstdlib>#include<cstring> #include<iostream>#include<algorithm>#define ll long long using namespace std; const int原创 2017-06-12 21:23:49 · 199 阅读 · 0 评论 -
bzoj1926: [Sdoi2010]粟粟的书架
传送门 对于第一问(R,C<=200); 预处理f[x][y][k],s[x][y][k].表示从(1,1)到(x,y)中大于等于k的数的和与大于等于k的数的个数。 然后二分最小的数即可。 对于第二问(R=1): 我们还是二分最小数。 判断就变成了询问一段区间内大于等于x的数的和以及它们的个数。 显然主席树可以处理这个#include<iostream>#include<cstdio原创 2017-07-13 21:49:24 · 218 阅读 · 0 评论 -
bzoj1854: [Scoi2010]游戏
传送门 神奇的并查集。 我们可以将一个拥有属性A,B的武器看成A,B之间的一条无向边 如果一个联通块中边的条数==点数-1, 则必定有一个数无法被凑出 否则一定存在方案凑出所有数 对于一个联通块中边的条数==点数-1, 我们显然选择放弃最大的点。 然后并查集XJB搞一下就可以了var f,v:array [0..1000005] of longint; n,i,x,y,p,q原创 2017-06-26 21:18:16 · 223 阅读 · 0 评论 -
bzoj1875: [SDOI2009]HH去散步
传送门 首先我们发现t特别大,n特别小。 这启示我们用矩阵乘法做。 设f[i][j]表示从i到j的方案数。 显然这是支持矩阵乘法的。 时间复杂度O(N^3*logT)#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cstdlib>#defi原创 2017-07-07 21:04:25 · 338 阅读 · 0 评论 -
bzoj1878: [SDOI2009]HH的项链
传送门 大力莫队算法一点不虚。 我们先将序列分成sqrt(N)块 然后将询问按照左端点坐在快编号为第一关键字,右端点为第二关键字进行排序。 然后我们只需要在两次询问之间进行修改就可以了 可以证明时间复杂度是O(Nsqrt(N))的。#include<cstring> #include<cmath> #include<cstdio> #include<iostream> #原创 2017-07-07 21:09:23 · 229 阅读 · 0 评论 -
bzoj2716: [Violet 3]天使玩偶
传送门 这题好像有CDQ分治做法 不过我太菜了没听懂 于是我打了一发kdtree 度娘: k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。K-D树是二进制空间分割树的特殊的情况。 大概思路就是每次确定一个轴,将点集平均分成两份,再递归建树。 至于怎么划分: 我们可以按照方差原创 2017-07-07 21:24:22 · 3964 阅读 · 0 评论 -
bzoj1895: Pku3580 supermemo
传送门 发现题目中的所有东西都可以用splay维护 然后就理所应当的成了splay裸题了。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cstdlib>#include<cmath>#define N 300030using namespace std;int n,m,原创 2017-07-08 21:55:20 · 261 阅读 · 0 评论 -
bzoj1905: Soldier 士兵控制的棋盘
传送门 首先我们大力转换坐标系。 然后我们做一遍扫描线求出矩形面积的交。 然后我们减去在外面的部分,可以发现一定是等腰三角形 在搞一个面积并就可以了 时间复杂度O(NlogN)#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>原创 2017-07-09 21:46:53 · 319 阅读 · 0 评论 -
bzoj1759: Let there be rainbows!
传送门 我 * 你 * 的辣鸡卡时限出题人 其实题目就是一个裸的树剖。 我不会告诉你我线段树写炸了3回 TLE代码:#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define N 200005using namespac原创 2017-05-21 19:07:29 · 244 阅读 · 0 评论 -
bzoj1759: Let there be rainbows!
传送门 显然这道题是可以用树剖水过去的。#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define N 200005using namespace std;struct edge{int to,next;}e[N*2];i原创 2017-06-05 20:51:54 · 224 阅读 · 0 评论 -
bzoj4785: [Zjoi2017]树状数组
传送门 老司机应该能发现他求的是后缀和吧。 然后就变成了判断a[l-1]==a[r]的概率。 区间覆盖的二维线段树水过。#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath>#include<cstring>#include<algorithm>#define N 100005#define ll lo原创 2017-04-05 10:13:56 · 363 阅读 · 0 评论 -
bzoj3196: Tyvj 1730 二逼平衡树
传送门 蛋疼树套树。 外层线段树维护区间。 内层treap维护数字出现情况。 打完这道我整个人都不好了。#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath>#include<cstring>#include<algorithm>#define N 200005#define M 3000005#d原创 2017-04-05 11:13:10 · 221 阅读 · 0 评论 -
bzoj3295: [Cqoi2011]动态逆序对
传送门 树状数组套主席树。 外层树状数组记录区间 内层主席树记录数字出现个数 删减时枚举在前面比他小的删去的点的数量 和在后面比他大的删去的点的数量 求值可以用树状数组实现。 时间复杂度nlogn^2#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath>#include<cstring>#inclu原创 2017-04-05 11:42:29 · 283 阅读 · 0 评论 -
bzoj1146: [CTSC2008]网络管理Network
传送门 树剖+线段树套平衡树 看到如此长的时限,我就放心大胆的开始(开车)了。 打代码真爽 具体实现: 1.二分答案, 2.在被轻重链剖分的树上跑线段树, 3.在每一个节点上维护平衡树用来查询区间排名。 复杂度分析: 1.二分一只log 2.树剖一只log 3.线段树一只log 4.平衡树一只log 然后就实现了Nlog^4N的做法。 四只log,四只log,跑得快,跑得原创 2017-04-05 20:32:07 · 393 阅读 · 0 评论 -
poj2124:K-th Number
传送门 主席树裸题。#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath>#include<cstring>#include<algorithm>#define N 100005using namespace std;int ls[N*20],rs[N*20],sum[N*20];int rt[N],a原创 2017-04-05 14:29:42 · 401 阅读 · 1 评论 -
bzoj3674: 可持久化并查集加强版
传送门 一点也没加强好不好 主席树+并查集启发式合并,实现nlog^2n的复杂度。 速度快到飞起。#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath>#include<cstring>#include<algorithm>#define N 10000005using namespace std;i原创 2017-04-06 08:14:05 · 647 阅读 · 1 评论 -
bzoj3744: Gty的妹子序列
传送门 如果不强制在线的话就是莫队水题。 可是~~~ 果断分块走起。 预处理出每一个快到其他节点的逆序对个数 用数状数组实现。 前面的就用主席树。 时间复杂度O(nsqrt(n)logn)#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath>#include<cstring>#include<alg原创 2017-04-06 09:09:21 · 361 阅读 · 0 评论 -
bzoj1453: [Wc]Dface双面棋盘
传送门 话说数据范围好像暴力能过?不管,讲正解。 发现暴力每一次询问需要O(N^2)。 但是每一次只修改一个数。 感觉比较浪费。 然后我们可以按照行跑线段树,然后暴力合并上下联通情况。 这样单次询问只要O(NlogN)了。#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<iostre原创 2017-04-30 21:28:28 · 556 阅读 · 0 评论 -
bzoj1493: [NOI2007]项链工厂
传送门 能不用splay坚决不用splay—–zyy 这道题如果没有旋转翻转操作的话就是一道区间修改,区间查询的线段树水题。 那么对于R,F操作应该怎么处理呢? 其实R,F操作之后珠子的相对位置没变 通俗来说就是一个珠子左右两边的珠子还是原来那两个 所以对于R,F操作我们只需要分别记录两个量即可:mov,rev 1.mov:表示当前整体顺时针移动了mov(即k变成k+mov) 输入R原创 2017-05-02 13:53:31 · 437 阅读 · 0 评论 -
bzoj1568: [JSOI2008]Blue Mary开公司
传送门 李超线段树。 维护若干个一次函数在每个端点的最大值 首先将端点离散化(本题不需要),线段树的每个区间维护的标记代表着覆盖这个区间的一条线段 每次下放标记,利用标记永久化的思想,修改对应的区间标记 若当前线段完全高于标记线段,则将当前线段进行标记 若当前线段完全低于标记线段,则将当前线段扔掉 若当前线段与标记线段有交点,考虑在上面的一部分是一个两条线段形成的分段函数,将长的线段作原创 2017-05-10 20:35:25 · 221 阅读 · 0 评论 -
bzoj1558: [JSOI2009]等差数列
传送门 显然直接维护比较萎。 考虑差分。 然后一次操作就变成了一次区间加,两次单点加。 直接用线段树维护以下就可以了。 注意标记合并时不要手残。#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath>#include<cstring>#include<algorithm>using namespace原创 2017-05-03 20:58:35 · 588 阅读 · 0 评论 -
bzoj4881: [Lydsy2017年5月月赛]线段游戏
传送门 为什么感觉我的做法不一样一点的呢? 首先,我们可以发现题目要求的就是将那个原序列分解成两个递增序列的方案数*2(两个人可以互换取法) 考虑dp求解: 设f[i][j][k]表示前i个数,两个递增序列目前最大值是j和k 发现j,k中必定有一个等于a[i],所以可以压掉一维。 现在是f[i][j]表示前i个数,两个递增序列目前最大值是j和a[i] 然后自己yy一波转移方程,得到:原创 2017-05-06 21:57:16 · 685 阅读 · 0 评论 -
bzoj1803: Spoj1487 Query on a tree III
传送门 显然看到子树九要想到dfs序。 按照dfs序建立主席树。 然后就在树上贪心往右走就可以了。#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define N 100005using namespace std;str原创 2017-06-15 20:54:53 · 245 阅读 · 0 评论 -
bzoj1756: Vijos1083 小白逛公园
传送门 用线段树维护区间最大前缀后缀,区间最优解和区间和。 合并时候xjb乱搞以下就可以了。#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define N 500010using namespace std;int a[N原创 2017-06-05 20:46:16 · 243 阅读 · 0 评论 -
bzoj1935: [Shoi2007]Tree 园丁的烦恼
传送门 在不强制在线的情况下我们为啥要去写树套树呢? 首先我们将询问离散化,然后我们将每一个询问分成四个小的询问 然后我们将修改和询问按照x坐标排序。 每次树状数组暴力求解即可。 时间复杂度O((N+M)logN)#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>原创 2017-07-23 17:29:26 · 368 阅读 · 0 评论