摘要: 题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 题解: 开LongLong!!!! 按照莫队的方法把询问拍个序,然后搞cnt数组统计每个颜色出现次数,用cur统计当前方案 阅读全文
posted @ 2018-01-03 16:03 MSPqwq 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 题目: UOJ也能评测 题解 请看代码 阅读全文
posted @ 2018-01-03 14:29 MSPqwq 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 题解: http://www.lydsy.com/JudgeOnline/problem.php?id=1878 题解: 莫队板子题 核心思想是对区间的询问离线之后按照合理的顺序来优化复杂度 一般的做法是先分块,以左端点所在块为第一关键字,右端点位置为第二关键字排序 用两个指针来跑,这样可以证明的是 阅读全文
posted @ 2018-01-03 07:42 MSPqwq 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2453 题解: 考虑维护每个位置的颜色上一次出现在哪里,计为pre[i],在询问l到r的时候,如果pre[i]<l,ans++ 所以每次询问时整块的按pre排序,之后的做法类似教主的魔法 阅读全文
posted @ 2018-01-03 07:06 MSPqwq 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2821 分块. 预处理: ans[i][j]表示i块到j块的答案; cnt[i][j]表示i数前j块出现的次数 询问: ret=l到r包含的整块部分答案,然后暴力处理块外的数出现次数. 我们发现 阅读全文
posted @ 2018-01-02 17:55 MSPqwq 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2653 题解: 设答案为ans,把大于等于ans的记为1,小于的记为-1,这样可以知道当前ans是大了还是小了 然后二分答案,就是求最大子段和的问题,根据网上的题解:[b,c]是必选的,然后选[ 阅读全文
posted @ 2018-01-01 16:27 MSPqwq 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 题目: emmmm是个权限题 题解: 带修改主席树的板子题,核心思想是用树状数组维护动态前缀和的性质来支持修改 修改的时候修改类似树状数组一样进行logn个Insert 查询的时候同理,树状数组的方法取出和这个位置相关的节点,用数组保存然后计算 阅读全文
posted @ 2018-01-01 12:02 MSPqwq 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 题目: 求树上两点之间第k小点权 题解: 对每个节点到根节点的路径建一棵线段树,这样每个点的线段树都从他父亲得到 对于询问(u,v),sum[u]+sum[v]-sum[lca]-sum[fa[lca]]可以表示u到v的路径 阅读全文
posted @ 2017-12-31 19:28 MSPqwq 阅读(157) 评论(0) 推荐(0) 编辑
摘要: #include<cstdio> #include<algorithm> #define N 200010 #define which(u) (ls[f[(u)]]==(u)) using namespace std; int n,m,a,f[N],ls[N],rs[N],val[N],d,tot, 阅读全文
posted @ 2017-12-31 09:46 MSPqwq 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 题目: 给个序列,问[l,r]区间内是否存在x>(r-l+1)>>1 题解: 好像大家都觉得这个题比较简单,没人写题解啊 先说BZOJ样例的格式应该是,第二个数是序列中数的范围(就是不用离散化) 10 3 1 2 1 2 1 2 3 2 3 3 8 1 2 1 3 1 4 1 5 2 5 2 6 6 阅读全文
posted @ 2017-12-30 21:22 MSPqwq 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 题目: 洛谷也能评测 题解: De了好长时间BUG发现是自己sort前面有一行for没删,气死. 题目询问第x秒时候前k小的P值之和. 朴素想法: 我们可以把P值离散化,然后对于每个时刻建一棵定义域是离散化后P值的线段树 每个节点维护了这个节点代表区间的任务个数和这些任务离散化之前的P值之和, 对于 阅读全文
posted @ 2017-12-30 20:16 MSPqwq 阅读(167) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #define N 100005 #define M N*20 using namespace std; int n,m,Q,a[N],b[N],rt[N],pool; int read() { int ret=0,neg=1;char j=getchar(); for (;j>'9' || j='0' && j>1; ... 阅读全文
posted @ 2017-12-29 21:19 MSPqwq 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 题目: 题解: 阅读全文
posted @ 2017-12-28 17:55 MSPqwq 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 题解: 每次reverse(l,r) 把l-1转到根,r+1变成他的右儿子,给r+1的左儿子打个标记就是一次反转操作了 每次find和dfs输出的时候下放标记,把左儿子和右儿子换一下 记得建树的时候建0到n+1 阅读全文
posted @ 2017-12-28 13:56 MSPqwq 阅读(178) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #define N 80010 #define which(x) (ls[fa[(x)]]==(x)) using namespace std; int id[N],pos[N],sz[N],ls[N],rs[N],fa[N],tot,n,m,root,a[N]; char op[233]; void pushup(int x) {sz[x]... 阅读全文
posted @ 2017-12-27 19:54 MSPqwq 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 题目: 洛谷也能评测....还有我wa了10多次的记录233 题解: 不要想得太复杂,搞一个全局变量记录一下工资的改变量Delta,这样可以等询问的时候就输出val+Delta,然后插入的时候插入x-Delta 不要想会不会有员工工资一样,直接插入就好,这样省不少代码量. 对于降工资操作,插入一个m 阅读全文
posted @ 2017-12-26 23:01 MSPqwq 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 题目: 洛谷也能评 题解: 记录一下当前树维护是宠物还是人,用Splay维护插入和删除. 对于任何一次询问操作都求一下value的前驱和后继(这里前驱和后继是可以和value相等的),比较哪个差值绝对值小就好啦 阅读全文
posted @ 2017-12-26 15:59 MSPqwq 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 下面给出Splay的实现方法(复杂度证明什么的知道是 nlogn 就可以啦) 首先对于一颗可爱的二叉查找树,是不能保证最坏nlogn的复杂度(可以想象把一个升序序列插入) (二叉查找树保证左子树元素大小都小于根元素大小,根元素大小都小于右子树元素大小,且子树都是二叉查找树) 所以我们需要一些非常巧妙 阅读全文
posted @ 2017-12-25 17:52 MSPqwq 阅读(479) 评论(0) 推荐(0) 编辑
摘要: 题目: 南开OJ有非权限提交处 http://oi.nks.edu.cn/zh/Problem/Details/2739 题解: 鹅鹅鹅....有三维(t,x,y),所以可以用CDQ解决的好题 初始点就是t超级小的点 先按x排个序,时间作为分治的第二维,这样只有前半段时间的修改操作对后半段时间的询问 阅读全文
posted @ 2017-12-25 14:47 MSPqwq 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1176 题解: 题目s无用 其实是CDQ还是能够看出来的,就是怎么做需要考虑考虑 首先对于一个区间的询问我们可以通过二维前缀和的方式转化成四个前缀询问,这样就可以用树状数组这类数据结构很快维护一维 阅读全文
posted @ 2017-12-24 15:45 MSPqwq 阅读(117) 评论(0) 推荐(0) 编辑