「NOI2016」区间 解题报告】的更多相关文章

「NOI2016」区间 最近思维好僵硬啊... 一上来就觉得先把区间拆成两个端点进行差分,然后扫描位置序列,在每个位置维护答案,用数据结构维护当前位置的区间序列,但是不会维护. 于是想研究性质,想到为什么要拿区间长度做权值呢,难道是有一些性质吗 于是思考了很久区间长度的性质,猜了一些sb结论,比如什么一个区间只有加入时和删除时的贡献算一下就可以了之类的... 全错了然后就自闭了... 然后想什么钦定最大值,然后询问位置区间,然后我发现线段树每个点要挂一个单调队列(事实上把单调队列从线段树上拿下来…
「NOI2016」网格 容易注意到,答案最多为2,也就是说答案为-\(1,0,1,2\)四种,考虑逐个判断. 无解的情况比较简单 如果\(nm\le c+1\),显然无解 如果\(nm=c+2\),判断2个跳蚤(如无说明,以下白点指跳蚤)是否四联通(如无说明,以下联通均指四联通),如果是,无解. 先不考虑复杂度 \(0\)的情况,就是白点有两个以上联通块,可以直接bfs判断 \(1\)的情况,就是白点存在割点,可以通过tarjan判断 \(2\)的情况,就是其他情况 这样的复杂度是\(O(Tnm…
「HNOI2016」树 事毒瘤题... 我一开始以为每次把大树的子树再接给大树,然后死活不知道咋做,心想怕不是个神仙题哦 然后看题解后才发现是把模板树的子树给大树,虽然思维上难度没啥了,但是还是很难写的. 大值思路是对每个子树维护成一个大节点,存一些根啊,深度啊,到大节点根距离啊,节点编号范围啊之类的信息. 然后发现维护相对节点标号大小是个区间第k大,得对dfs序建一颗主席树 然后每次询问倍增跳一跳,讨论个几种情况之类的. ps:别吐槽名字 Code: #include <cstdio> #i…
「HNOI2016」序列 有一些高妙的做法,懒得看 考虑莫队,考虑莫队咋移动区间 然后你在区间内部找一个最小值的位置,假设现在从右边加 最小值左边区间显然可以\(O(1)\),最小值右边的区间是断掉的,但注意它是单调的 于是每个点假装向左边第一个小于它的位置连边,就可以处理出前缀和一样的东西,然后预处理后也是\(O(1)\)的 Code: #include <cstdio> #include <cctype> #include <algorithm> #include…
「SCOI2016」美味 状态极差无比,一个锤子题目而已 考虑每次对\(b\)和\(d\)求\(c=d \ xor \ (a+b)\)的最大值,因为异或每一位是独立的,所以我们可以尝试按位贪心. 如果要求\(c\)的从低到高第\(i\)位为\(0\)(最低位为第\(0\)位),那么此时\(c\)的更高位是确定好的了 \[ \_\_\_\_\_\_\_01111111\\ \_\_\_\_\_\_\_00000000 \] 这是\(c\)的上界和下界,分别减去\(b\)后,得到\(a\)需要满足的…
「SCOI2016」萌萌哒 这思路厉害啊.. 容易发现有个暴力是并查集 然后我想了半天线段树优化无果 然后正解是倍增优化并查集 有这个思路就简单了,就是开一个并查集代表每个开头\(i\)每个长\(2^j\)的区间的归属 然后合并就随便合并 最后需要\(2^0\)的信息,从上面把信息分裂传下来就好了 Code: #include <cstdio> #include <cctype> const int N=1e5+10; template <class T> void r…
「NOI2014」购票 写完了后发现写的做法是假的...然后居然过了,然后就懒得管正解了. 发现需要维护凸包,动态加点,询问区间,强制在线 可以二进制分组搞,然后你发现在树上需要资瓷撤回,然后暴力撤回(雾 然后就被卡了 卡法,在\(2^k-1\)位置搞一朵菊花 先留坑,以后要是会了一些神奇的姿势就来搞 这题叉积会爆ll,坑 Code: #include <cstdio> #include <cctype> #include <vector> #include <a…
「NOI2017」整数 有一些比较简单的\(\log^2n\)做法 比如暴力在动态开点线段树上维护每个位置为\(0\)还是\(1\),我们发现涉及到某一位加上\(1\)或者减去\(1\)实际上对其他位的影响只有区间覆盖,通过线段树上二分可以得到区间覆盖的位置,然后暴力区间覆盖即可. 反正我这种菜鸡大常数写法只得到了68分.. 考虑利用势能,注意到如果同时改变加法和减法,势能很容易被\(b\)搞掉 如果分开维护加法和减法,把位置上的\(1\)的个数当做势能,可以发现,暴力修改是均摊\(O(n\lo…
「ZJOI2016」旅行者 对网格图进行分治. 每次从中间选一列,然后枚举每个这一列的格子作为起点跑最短路,进入子矩形时把询问划分一下,有点类似整体二分 至于复杂度么,我不会阿 Code: #include <cstdio> #include <cctype> #include <cstring> #include <queue> #include <vector> #include <algorithm> using std::mi…
「HNOI2016」网络 我有一个绝妙的可持久化树套树思路,可惜的是,它的空间是\(n\log^2 n\)的... 注意到对一个询问,我们可以二分答案 然后统计经过这个点大于当前答案的路径条数,如果这个路径条数等于大于当前答案的所有路径条数,那么这个答案是不行的. 关于链修改单点询问,可以树状数组维护dfs序,然后每次修改链去差分修改 然后把二分答案拿到整体二分上去就可以了 Code: #include <cstdio> #include <cctype> #include <…