[BZOJ4358]Permu(回滚莫队)】的更多相关文章

[BZOJ4358]Permu(回滚莫队) 题面 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域连续段长度. 分析 最简单的方法显然是用线段树维护最长值域连续段长度,复杂度\(O(n\sqrt n \log n)\),会TLE 我们以值为下标维护两个数组lb[v],rb[v]表示<v(定义为"左侧")和>v(定义为"右侧)的连续段长度,当我们加入一个值v的时候,会产生一个长度为lb[v]+rb[v]+1的…
这道题是几天前水过去的,现在快没印象了,水一发. 首先我们看到它让求解的是最长的值域 连续段长度,很好. 然后就想到了山海经,但但是我还没有做. 然后又想到了很久以前的一次考试的T3旅馆hotel(我是用暴力直接过的QAQ),正解也是线段树. 但是我还是想不到用线段树,因为我单纯的认为当前在学莫队就只会用到莫队. 后来还是问了同学. 然后就很简单了. 我们考虑询问区间的这类操作. 一种做法是各种神仙树套树解决区间问题. 另一种骗分做法就是莫队了. 不会莫队..出门左拐(逃 那么这道题思路就可以出…
题目描述 然而贪玩的$dirty$又开始了他的第三个游戏. $dirty$抓来了$n$只蚂蚁,并且赋予每只蚂蚁不同的编号,编号从$1$到$n$.最开始,它们按某个顺序排成一列.现在$dirty$想要进行$m$场比赛,每场比赛给出$l$和$r$,表示选出从左向右数第$l$只至第$r$只蚂蚁.被选出的蚂蚁需要快速地按编号从小到大排序,之后这些蚂蚁中编号连续的蚂蚁将围成一个圈.每场比赛结束后,蚂蚁们还需要快速地回到最开始的位置. 按照蚂蚁的审美标准,围成的圈越大美观值就越大.于是$dirty$每次需要…
LOJ 莫队.发现只需要维护前驱后继就可以了. 但是加入一个点需要找到它当前的前驱后继,很麻烦还带个\(\log\). 但是如果只有删除某个点,只需要更新一下它的前驱后继即可. 用回滚莫队就好惹. 撤销,即重新加入点时,按顺序把每个点的前驱后继改回来即可. 不需要求斜率=-= atan2(y,x):返回点\((x,y)\)与\(x\)轴正半轴的夹角. //6527ms 8292K #include <cmath> #include <cstdio> #include <cct…
题目链接 \(Description\) 长度为n的数列,m次询问,每次询问一段区间最大的 \(A_i*tm_i\) (重要度*出现次数) \(Solution\) 好像可以用莫队做,但是取max的操作普通莫队是不好撤销的(Subd部分) 于是可以用不带删除的莫队: 回滚莫队 询问依旧是按(左端点所在块,右端点)排序 1.对于同在一块的询问,暴力查询,最差O(sqrt(n)) 2.对于不在同一块的询问(左端点ql在左边,右端点qr在右边的某块) 我们对左端点相同的询问一起考虑,这时r一定是单调递…
传送门 比较简单的一道回滚莫队吧. 每次询问用bitset优化kosaraju统计答案. 就是有点难调. 然后向dzyo学长学习了回滚莫队的一种简洁的实现方式,就是直接建立一个sqrt(m)∗sqrt(m)sqrt(m)*sqrt(m)sqrt(m)∗sqrt(m)的动态数组按块存储询问. 这样好写得多. 还有就是学习了korasaju用bitset优化的写法. 代码: #include<bits/stdc++.h> #define N 155 #define M 300005 #define…
传送们 简单的回滚莫队,调了半天发现排序的时候把m达成了n... 代码: #include<bits/stdc++.h> #define N 100005 #define ll long long using namespace std; ll cnt[N],tot[N],val[N],ans[N],rk[N],mp[N],tmp; int n,m,blo[N],block,num,pos=1,siz; struct Q{int l,r,id;}q[N]; inline ll read(){…
Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. 日记中记录了连续N天发生的时间,大约每天发生一件. 事件有种类之分.第i天(1<=i<=N)发生的事件的种类用一个整数Xi表示,Xi越大,事件的规模就越大. JOI教授决定用如下的方法分析这些日记: 1. 选择日记中连续的一些天作为分析的时间段 2. 事件种类t的重要度为t*(这段时间内重要度为t…
题面 传送门 题解 因为并不强制在线,我们可以考虑莫队 然而莫队的时候有个问题,删除很简单,除去它和前驱后继的贡献即可.但是插入的话却要找到前驱后继再插入,非常麻烦 那么我们把它变成只删除的回滚莫队就好了 不知道回滚莫队的可以看看这里 //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define inline __attribute__((always_inline)) #define fp…
传送门 这是一个叫做回滚莫队的神奇玩意儿 是询问,而且不强制在线,就决定是你了莫队 如果是每次插入一个数是不是很简单? 然而悲剧的是我们莫队的时候不仅要插入数字还要删除数字 那么把它变成只插入不就行了么? 我们莫队将询问分块的时候,以左端点所在块为第一关键字,右端点(不是右端点所在块)为第二关键字 对于每一个询问,如果左右端点在同一块中,直接暴力处理,复杂度\(O(\sqrt{n})\) 如果不在同一个块中呢?我们把所有左端点在同一块中的一起处理,那么右端点就是单调增的,这一部分只有插入,暴力计…