[Ynoi2018]五彩斑斓的世界】的更多相关文章

题目描述 二阶堂真红给了你一个长为n的序列a,有m次操作 1.把区间[l,r]中大于x的数减去x 2.查询区间[l,r]中x的出现次数 题解 做YNOI真**爽... 我们发现这道题的操作非常诡异,把大于x的数减去x. 想一想这个操作会带来什么,会使这个数列的极差减小x(如果有大于x的数的话). 然后如果我们能以至多O(x)的代价是极差缩小x的话,那么它的总复杂度是不会超过O(n)的. 然后我们发现log数据结构没法维护这种东西. 于是就用到了分块,每个块中维护每种数字出现的最早位置,然后把相同…
洛谷 Codeforces 又是一道卡常题-- 思路 YNOI当然要分块啦. 分块之后怎么办? 零散块暴力,整块怎么办? 显然不能暴力改/查询所有的.考虑把相同值的用并查集连在一起,这样修改时就只需要枚举值了. 然而每次修改的\(x\)特别小时仍然复杂度爆炸,发现大于\(x\)的减去\(x\)等价于小于等于\(x\)的加上\(x\),然后整体减去\(x\). 那么,设一个块的最大值为\(mx\),则 \(2x\geq mx\)时枚举\(x<v\leq mx\),把\(v\)的并查集连到\(v-x…
由于晚上比赛二连(Atcoder&codeforces),外加复习学考,所以暂时没时间写了. 贴个O(n√n)的分块代码,洛谷和cf上都过了,但垃圾bzoj卡不过去,不改了. #include<bits/stdc++.h> using namespace std; ; ][N],tag[N]; int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);} void build(int id) { ; ; for(int i=l[id];i&…
题面 写在前面的扯淡: 分块的总体学习告一段落,这算是分块集中学习的最后一题么:以后当然也可能会写,就是零零散散的题了=.= 在洛谷上搜ynoi发现好像只有这道题和 由乃OI 2018 未来日记 是分块,久闻由乃OI之大名,就想试着写一写这道题(那道太毒了,写不了):结果一开始差点被吓跑了,不过最后还是硬着头皮写完了QAQ “分块最重要的就是常数” — —shadowice1984 好像挺有道理的,分块从诞生之日起就是一个依靠你的决策而决定复杂度的算法(或思想),它不像什么高级的数据结构每块的写…
传送门 Descroption 给了你一个长为n的序列a,有m次操作 1.把区间[l,r]中大于x的数减去x 2.查询区间[l,r]中x的出现次数 Solution 分块 对于每个块,我们都分别维护: 每种数出现的次数,需要用到并查集,即把相同的数合并在一起 标记tag,表示这个块总共减了多少 maxx,表示这个块的最大值 对于查询,按照分块的套路直接查询就可以了 修改的时候,为了保证复杂度正确,我们考虑每次通过\(O(x)\)的复杂度,实现整个块的极差减少\(x\). 这样,我们就能保证总修改…
\(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),处理 \(m\) 次操作: 给定 \(l,r,x\),把 \([l,r]\) 内所有 \(>x\) 的数减去 \(x\): 给定 \(l,r,x\),查询 \([l,r]\) 内 \(x\) 的出现次数.   \(n\le10^6\),\(m\le5\times10^5\),\(0\le a_i,x\le10^5\). \(\mathcal{Solution}\)   巧妙的分块题.   分…
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数   组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008]木棍分割 第一问二分,第二问记$dp[i][j]$为前$i$根砍$j$刀的方案,那么它可以由所有$sum[i]-sum[k]<=ans1$的$k$转移而来,用滚动数组优化空间,用队列的形式优化转移 P1410 子序列 贪心能过(数据水).dp的话,考虑$f[i][j]$表示前面$i$个数的最长上升…
编辑 目录 tricks 系列 随机的性质 bitmask 建图 最基本的 黑白染色 Kruskal重构树 并查集维护值域 带根号的数三元环 根号分治 调和级数哈希 多属性哈希 时光倒流 时光反复横跳 主席树维护二分 基环树上dp 换根dp 相对顺序不变 线段树节点合并时二分 势能分析线段树 gcd 变 phi set 维护精确枚举 因数id 幂的意义 不太常见 另类回文 维护差量 数论域的 log 幂分类讨论 biteset 维护 mutiset tricks 系列 随机的性质 here bi…
"望月悲叹的最初分块" (妈呀这名字好中二啊(谁叫我要用日本轻小说中的东西命名真是作死)) 这里就直接挂csy的题解了,和我的不太一样,但是大概思路还是差不多的,我的做法是和“五彩斑斓的世界”有点类似的维护方法 先考虑如何求区间第k小值.对序列和权值都进行分块,设bi,j表示前j 块中权值在i 块内的数字个数,ci,j 表示前j 块中数字i 的出现次数.那么对于一个询问[l,r] ,首先将零碎部分的贡献加入到临时数组tb 和tc 中,然后枚举答案位于哪一块,确定位于哪一块之后再暴力枚举…
题解: 全分块是啥操作啊.. 而且都好难.. 1.未来日记 这个比较简单 对每个块开个线段树维护权值 $n\sqrt{n}logn$ 这个会炸空间 并不能做... 但还是说一下做法 首先考虑分块 然后在每个块上我们要支持单点修改,查区间第k大 比较自然的想到了用线段树维护 如果没有修改就是在$\sqrt{n}$颗树上一起二分 多了修改操作 对于整块,我们考虑要打一个lazy标记 表示x颜色变成y 考虑用并查集维护 对于整块修改 $x--->y$这个操作 我们可以选择将x颜色指向y颜色 而对于单点…