[NOIP2017]列队 线段树】的更多相关文章

考虑n=1的做法,就是支持: 1.在线删一个数 2.在结尾加一个数 3.查询序列的第y个数 用线段树记录区间内被删元素的个数,可以通过线段树上二分快速得解,对于新增的数,用vector记录即可. 对于满分同样如此,对每行开一个线段树,再对最后一列单独开一个. 对于每次操作: 若在最后一列:就是对最后一列直接使用n=1的做法. 若不在:对第x列的前m-1个用n=1的做法,再将最后一列的第x个加入第x列的末尾,然后再对最后一列使用n=1的做法. #include<cstdio> #include&…
---题面--- 题解: 之前写的splay,,,然而一直没调出来,我感觉是某个细节想错了,,然而已经重构4次代码不想再写splay了.于是今天尝试了线段树的解法. 首先因为每次出列之后的变化都是将当前行左移,然后将最后一列上移,所以最后一列不适合和其他的行放在一起处理. 因此对于每行的前m - 1位开一棵线段树,对于最后一列开一棵线段树. 但是因为空间开销过大无法承受,因此考虑动态开点.一开始每棵线段树内只有一个节点,这个节点代表了当前行1 ~ m - 1的所有节点. 如果我们要从中删除一个节…
题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n \times mn×m 名学生,方阵的行数为 nn ,列数为 mm . 为了便于管理,教官在训练开始时,按照从前到后,从左到右的顺序给方阵中 的学生从 1 到 n \times mn×m 编上了号码(参见后面的样例).即:初始时,第 ii 行第 jj 列 的学生的编号是 (i-1)\times m + j(i−1)×m+j . 然而在练…
题面 线段树入门题. 我们考虑线段树来维护这个矩阵. 首先我们先定n+1棵线段树前n棵维护每行前m-1个同学中没有离队过的同学,还有一棵维护第m列中没有离队过的同学.再定n+1棵线段树前n棵线段树维护每行因一个同学离队而从第m列插♂进来的同学,还有一棵维护到队尾的同学. 具体怎么维护?比如当前的询问是(x,y),先分两种情况: 1.不在第m列. 那么我们就先看看这个同学是不是插♂进来,是的话就在那后n+1棵线段树的第x棵里找,不然就在前n+1棵的第x棵里找. 然后在对应线段树的对应位置里删除离队…
题目:https://www.luogu.org/problemnew/show/P3960 NOIP 题,不用很复杂的数据结构...但又参考了许多: 要求支持维护删除第 k 个和在末尾插入的数据结构,线段树就很好: 所以每行一个线段树维护前 m-1 个元素,最后一列一个线段树即可: 但 n+1 个线段树显然空间太大,考虑利用一开始是按顺序排列的特点: 也就是不用实际开出来所有线段树的点,只要它是满的就可以直接算出来: 对于新加入线段树的点,如果真的加入线段树里,又不会算空间了... 但是新加入…
定义第i行为所有的点(i,j),0<j<m 可以发现,每一行是相对独立的,每一次操作只会影响到当前行和最后一列 考虑每一行和最后一列各开一个树状数组,但这样显然会爆空间 实际上,对于没有离队过的点是没必要储存的,可以直接算出编号, 因此只要用vector储存每一行和最后一列后加入的点即可 还需要预处理一个数组d[i]表示第i次询问当前行的离队的点的纵坐标 这个可以离线做出来,然后只需要对最后一列维护一个树状数组即可 Code #include <cstdio> #include &…
题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n \times mn×m名学生,方阵的行数为 nn,列数为 mm. 为了便于管理,教官在训练开始时,按照从前到后,从左到右的顺序给方阵中 的学生从 1 到 n \times mn×m 编上了号码(参见后面的样例).即:初始时,第 ii 行第 jj 列 的学生的编号是(i-1)\times m + j(i−1)×m+j. 然而在练习方阵的时候…
原文链接https://www.cnblogs.com/zhouzhendong/p/9265380.html 题目传送门 - 洛谷P3960 题目传送门 - LOJ#2319 题目传送门 - Vijos P2033 题意 懒了,不概括了. 题解 一开始写了树状数组. 算法非常真,写完全部 WA,但是漏了一步,我快写吐了,于是弃疗之后从某度*了一份代码. 我来说说线段树的做法: 线段树动态开点,每行一个线段树,最后一列一个线段树. 线段树要支持找区间第 $k$ 大,这样方便找出指定位置. 注意一…
正解:动态开点线段树 解题报告: 传送门! 因为最近学主席树的时候顺便get到了动态开点线段树?刚好想起来很久很久以前就想做结果一直麻油做的这题,,,所以就做下好了QAQ 然后说下,这题有很多种方法,我目前是先只写个最傻逼的方法,等学了splay什么的再来upd一下QAQ(这题好像有,线段树.树状数组.splay等各种方法,我可能都会写只要我麻油咕QAQ 然后就直接进入正题QAQ 首先其实要知道动态开点线段树和线段树思想什么的都是一样儿的,只是实现方法有一点儿区别(就是动态开点线段树节省点儿空间…
传送门 唉突然回忆起去年去noipnoipnoip提高组试水然后省二滚粗的悲惨经历... 往事不堪回首. 所以说考场上真的有debuffdebuffdebuff啊!!!虽然当时我也不会权值线段树 这道题直接上权值线段树维护nnn行和第mmm列就行了. 原因? 这是因为每次修改只会影响到某一行和最后一列. 但直接跑是会炸空间的. 因此我们动态开点来操作一波就行了. 对于被删除的点我们存到vectorvectorvector里面就行. 代码: #include<bits/stdc++.h> usi…