【BZOJ】1507: [NOI2003]Editor(Splay)】的更多相关文章

http://www.lydsy.com/JudgeOnline/problem.php?id=1507 当练splay模板了,发现wjmzbmr的splay写得异常简介,学习了.orzzzzzzzzzzz!!!!!! 这个版本很好写的,比数组的好写多了.但是异常的慢啊T_T 这个版本的splay,会修改null的fa,但不影响结果,这点要记住. #include <string> #include <cstdio> using namespace std; char strI[1…
http://www.lydsy.com/JudgeOnline/problem.php?id=1251 不行..为什么写个splay老是犯逗,这次又是null的mx没有赋值-maxlongint... #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorithm> #inc…
[BZOJ1056][HAOI2008]排名系统(Splay) 题面 BZOJ 洛谷 题解 \(Splay\)随便维护一下就好了,至于名字什么的,我懒得手写哈希表了,直接哈希之后拿\(map\)压. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<…
[BZOJ3506]排序机械臂(Splay) 题面 神TMBZOJ没有题面,感谢SYC的题面 洛谷的题面也不错 题解 对于每次旋转的物体 显然可以预处理出来 现在只要模拟旋转操作就行了 至于在哪里放标记的问题 我只在第K大放会鬼.. 所以在Splay里面也放了一次(和LCT一样的) 然而我每次都把排到了正确位置的元素直接给删掉了... 所以跑的很慢很慢... #include<iostream> #include<cstdio> #include<cstdlib> #i…
题目 传送门:QWQ 分析 像求next一样求num. 第二次求next时加上不超过一半的条件. 时间复杂度: $ \huge O ( n ) $ 代码 // luogu-judger-enable-o2 #include <bits/stdc++.h> using namespace std; ; ], num[]; ]; long long ans; void kmp() { ans=; nxt[]=-; num[]=; ,j;i<=n;i++) { ]; j>= &&…
http://www.lydsy.com/JudgeOnline/problem.php?id=1068 发现如果只设一维的话无法转移 那么我们开第二维,发现对于前i个来说,如果确定了M在哪里,第i个是用R还是不用就能确定了(如果用R那么在中间一定变成了缓冲串) 那么可以转移了 设d[i,j]表示前i个串,最近的一个M在i的前边一个格子,的最短长度,有 d[1,1]=1 d[i,i]=min{d[i-1,j]}+2 //即用一次M又补上i,所以+2 d[i,j]=d[pos,j]+1,其中pos…
http://www.lydsy.com/JudgeOnline/problem.php?id=3709 很水的题...但是由于脑洞小..漏想了一种情况.. 首先显然能补血的先杀.. 然后杀完后从补血越多的杀..(这点我之前考虑错了QAQ) 正确性显然........ #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream>…
题面 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给每个处在收养所的宠物一个特点值.这样他就能够很方便的处理整个领养宠物的过程了,宠物收养所总是会有两种情况发生:被遗弃的宠物过多或者是想要收养宠物的人太多,而宠物太少. 1.被遗弃的宠物过多时,假若到来一个领…
http://www.lydsy.com/JudgeOnline/problem.php?id=1024 果然现在弱到连搜索都不会了么..... 一直想二分...但是无论如何也推不出怎么划分... QAQ 然后暴力搜索每一次割的时候左边右边各有几块或者上边下边各有几块就行了QAQ #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostr…
题目 传送门:QWQ 分析 2-sat模板(然而辣鸡如我还是调了好久) 代码 //bzoj 1823 2-sat #include <bits/stdc++.h> using namespace std; inline int read() { ,f=;char ch=getchar(); ;ch=getchar();} +ch-';ch=getchar();} return x*f; } int get() { int x; char c=getchar(); while(c!='m'&am…
题目 2160: 拉拉队排练 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练好拉拉队有多么的重要.拉拉队的选拔工作已经结束,在雨荨和校长的挑选下,n位集优秀的身材.舞技于一体的美女从众多报名的女生中脱颖而出.这些女生将随着篮球队的小伙子们一起,和对手抗衡,为艾利斯顿篮球队加油助威.一个阳光明媚的早晨,雨荨带领拉拉队的队员们开始了排练.n个女生…
题目链接 其实这题用Set就完事了但我不会Set 智商-=inf 求虚树上所有边权和的两倍. 具体方式就是splay把所有在虚树上的点存一下,(按照DFS序排序的)每次插入/删除会更新前驱和它.后继和它.前驱和后继的值 #include<cstdio> #include<cstring> #include<algorithm> #include<cctype> #include<cstdlib> #include<map> #defi…
题目链接 SBT,我居然没看出来. 就是插入的时候考虑向平衡树里插两个差值,删一个差值. 另一个操作就是维护某元素和其前驱后继的差值最小值就行了. 然后Splay超时了…… (貌似Splay超时了之后我都是修改splay操作的频率暴力硬卡,而不是考虑换一种思路…… 然后就被我卡过了. // luogu-judger-enable-o2 // luogu-judger-enable-o2 // luogu-judger-enable-o2 // luogu-judger-enable-o2 #in…
http://www.lydsy.com/JudgeOnline/problem.php?id=1491 囧囧囧...................... 囧1:虽然自己想到做法了,但是操作的时候,竟然忘记之前想到的求最短路的数量...(充分证实我是蒟蒻,)然后稍稍看了下题解代码.. 囧2:初始化这个梗我就T_T...还有此题精度各种爆啊...后2wa就是精度有问题啊囧.这题要全部开double..要不然就....我查了下double的精度,omg..300多位..这太爽. 此题不用说了吧,,…
题面 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工 作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他心情好,就可能把每位员工的工资加上一个相同的量.反之,如果心情不好,就可能把 他们的工资扣除一个相同的量.我真不知道除了调工资他还做什么其它事情. 工资的频繁调整很让员工反感,尤其是集体扣除工资的时候,一旦某位员工发现自己的工资已经低于了合同规定的工资下界,他就会立刻气…
懒得复制,戳我戳我 Solution: \(Splay\)板子题,注意可以选择相等大小 Code: //It is coded by Ning_Mew on 4.10 #include<bits/stdc++.h> #define ls(x) node[x].ch[0] #define rs(x) node[x].ch[1] #define fa(x) node[x].fa #define root node[0].ch[1] using namespace std; const int ma…
题目 题目描述 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 输入输出格式 输入格式: 输入两个整数M,N.1<=M<=10^8,1<=N<=10^12 输出格式: 可能越狱的状态数,模100003取余 输入输出样例 输入样例#1: 复制 2 3 输出样例#1: 复制 6 说明 6种状态为(000)(001)(011)(100)(110)(111)    …
http://www.lydsy.com/JudgeOnline/problem.php?id=1857 好神奇的三分.. 第一次写三分啊sad..看了题解啊题解QAQ 首先发现无论怎么走一定是在AB和CD上选了两个点然后走的(包括ABCD四个点),所以我们就是要找出这两个点就行了. 且AB上有且只有一个最优点,而每一个AB上的点也对应CD唯一一个最优点orz. 所以我们三分AB上的点(酷炫但是不知道为啥这是个单峰函数orz),然后对应三分CD上的点(这个比前面的好证..这个初中就学了的吧.sa…
题目链接 ddosvoid和自为风月马前卒教了我这道题 他们好强啊 如果我们要反转区间[l,r] 我们首先把l的前驱旋转到根节点 再把r的后继旋转到根节点的右儿子 那么此时根节点的右儿子的左儿子所代表的就是区间l,r 具体为啥不知道 然后可以给splay的节点打标记,就像线段树一样 inline void pushdown(int x){ if(!tree[x].tag) return; swap(tree[x].e[],tree[x].e[]); tree[tree[x].e[]].tag^=…
题意:见题面 思路:因为每个时刻要么全是人要么全是宠物,所以可以一棵splay解决 维护单点插入,单点删除,求前驱,求后继即可 ..,..]of longint; num,fa:..]of longint; n,cnt,t1,t2,i,root,p,x,y:longint; ans:int64; procedure rotate(x:longint;var k:longint); var y,z,l,r:longint; begin y:=fa[x]; z:=fa[y]; ]=x ; r:=-l…
[BZOJ3680]吊打XXX(模拟退火) 题面 BZOJ 题解 模拟退火... 就是模拟退火 然后这题有毒 各种调参数之后终于\(AC\)了.. 这种题就是玄学呀... 温度要调大 最后跑完还要向四周多\(rand\)几次 保证能够找到最优解... #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<…
[BZOJ3671][NOI2014]随机数据生成器(贪心) 题面 BZOJ 题解 前面的模拟 真的就是语文阅读理解题目 理解清楚题目意思 然后就会发现要求的就是一个贪心 从小往大枚举,检查当前数能不能选 如果能选 就会限制其他行的左右能够到达的范围 暴力修改一下 然后就很愉快的\(AC\)了 这题别的不卡 卡空间,卡格式 我也是醉了 #include<iostream> #include<cstdio> #include<cstdlib> #include<cs…
[BZOJ2037]Sue的小球(动态规划) 题面 BZOJ 题解 莫名想到这道题目 很明显是一样的 设\(f[i][j][0/1]\)表示已经接到了\(i-j\)这一段的小球 当前在\(i\)或者在\(j\)的最小费用 这个费用是随着时间增长,没有被接到的小球产生的 这样就可以避免存下时间 提前就把费用减去 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #in…
[BZOJ4028][HEOI2015]公约数数列(分块) 题面 BZOJ 洛谷 题解 看一道题目就不会做系列 首先\(gcd\)最多只会有\(log\)种取值,所以我们可以暴力枚举出所有可能的\(gcd\). 那么我们现在按照步骤要解决两个问题.第一个是怎么动态维护\(gcd\)的取值,第二个是怎么动态维护异或和. 我们考虑分块. 只维护块内的前缀\(gcd\)和前缀异或和,这样子每次修改只需要暴力重构块. 每次询问的时候如果块内的\(gcd\)不变,那么二分答案,找找有没有满足条件的异或和.…
[BZOJ4013][HNOI2015]实验比较(动态规划) 题面 BZOJ 洛谷 题解 看题目意思就是给你一棵树,连边表示强制顺序关系.然后你要给点染色,在满足顺序关系的情况下,将序列染成若干个颜色,同颜色之间没有顺序关系.求染色方案数. 那么设\(f[i][j]\)表示以\(i\)为根的子树内有\(j\)种颜色,那么每次枚举当前点的子树内的颜色和新加入的子树内的颜色,假设分别是\(j,k\),假设总颜色是\(i\). 那么我们现在要求把\(j\)种颜色和\(k\)种颜色合并出\(i\)种颜色…
[BZOJ4007][JLOI2015]战争调度(动态规划) 题面 BZOJ 洛谷 题解 神仙题,我是做不来. 一个想法是设\(f[i][j]\)表示当前考虑到\(i\)节点,其子树内有\(j\)个人选择了打仗的最大贡献. 但是我们发现直接做我们并不会转移,因为我们不知道每个儿子的选择情况. 那么我们直接爆搜这条链上的每个点的情况,这样子到了叶子节点就可以直接转移上去. 而这样子爆搜的条件下,显然一个点的左右两个儿子是独立的,即转移是互不影响的,所以这样子并没有问题. 那么复杂度是什么呢? 我们…
[BZOJ1831][AHOI2008]逆序对(动态规划) 题面 BZOJ 洛谷 题解 显然填入的数拎出来是不降的. 那么就可以直接大力\(dp\). 设\(f[i][j]\)表示当前填到了\(i\),上一个填的数是\(j\)的最小逆序对数. 随便拿什么维护一下转移就好了. #include<iostream> #include<cstdio> using namespace std; #define MAX 10010 inline int read() { int x=0;bo…
[BZOJ5471][FJOI2018]邮递员问题(动态规划) 题面 BZOJ 洛谷 给定平面上若干个点,保证这些点在两条平行线上,给定起点终点,求从起点出发,遍历所有点后到达终点的最短路径长度. 题解 不会做,于是点开LOJ,点开除了\(std\)之外唯一过的人的代码,照着打了一遍QwQ...... 然后再对着代码YY一遍就有了这篇东西...... 强制令起点的位置是第\(0\)行(方便而已). 在第\(0\)行枚举一个\(i\),在第一行枚举一个\(j\). 设\(f[j][0]\)表示第\…
[BZOJ5318][JSOI2018]扫地机器人(动态规划) 题面 BZOJ 洛谷 题解 神仙题.不会.... 先考虑如果一个点走向了其下方的点,那么其右侧的点因为要被访问到,所以必定只能从其右上方的点走过来.同理,如果这个点向右,那么其下方的点就只能从其左下方的点向右走过来. 因此我们可以确定所有平行于副对角线的斜线上的位置的方向都是相同的. 考虑\(n=m\)的情况,从一个点开始无论向右开始向下,都只会走到下一条对角线上,因此这个过程本质上就是就是固定了一个向下向右的序列,然后循环这个操作…
[BZOJ5314][JSOI2018]潜入行动(动态规划) 题面 BZOJ 洛谷 题解 不难想到一个沙雕\(dp\),设\(f[i][j][0/1][0/1]\)表示当前点\(i\),子树中一共放了\(j\)个,这个点是否放了,这个是否被覆盖了. 看起来直接合并是\(O(nk^2)\)的QwQ..... 然后我以为是\(O(nk^2)\)的就不会做了嘤嘤嘤. 实际上是\(O(nk)\)的... 证明大概是这样的: 考虑什么时候会产生\(O(k^2)\)的贡献,即一个点有两棵子树的大小大于\(k…