【题解】Luogu P1503 鬼子进村】的更多相关文章

平衡树好题 原题传送门 这道题要用Splay,我博客里有对Splay的详细介绍 这道题思维有点难,要把被摧毁的节点插入平衡树,而不是把没有摧毁的节点插入 先把0和n+1插入平衡树,作为边界 操作1:摧毁节点,把该点插入平衡树 操作2:修复最后一个被摧毁节点的位置的可以用栈来求出,并把该点位置从平衡树中删除 操作三:搞一个vis数组,记录是否被摧毁,如果被摧毁了,直接输出0,没被摧毁的话,输出该点后继的位置-该点前驱的位置-1,这应该也很好理解qaq 剩下就没什么问题了(除了代码有点长) #pra…
嘟嘟嘟 线段树好题. 其实挺水的,想暴力怎么做:每一次从这个点开始向两边扩,直到遇到第一个摧毁的房屋. 那么把暴力改成倍增,然后线段树查询区间和是否为0.时间复杂度O(nlog2n). 题解好像有线段树的O(nlogn)的做法,但是特别麻烦,也没怎么看懂. #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #inclu…
还是拿set搞... 用set记录每个被摧毁的位置,Q的时候二分一下,在和上一个摧毁的位置减一下,即可求出能到的房子数 #include<iostream> #include<cstdio> #include<set> #define R register int ; using namespace std; set<int> s; set<int>::iterator it; int stk[N],top,n,m; inline int g()…
P1503 鬼子进村 题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. 题目描述 描述 县城里有\(n\)个用地道相连的房子,第\(i\)个只与第\(i-1\)和第\(i+1\)个相连.这是有\(m\)个消息依次传来 1.消息为\(D\) \(x\):鬼子将\(x\)号房子摧毁了,地道被堵上. 2.消息为\(R\) :村民们将鬼子上一个摧毁的房子修复了. 3.消息为\(Q\) \…
题目传送门 鬼子进村 题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. 题目描述 描述 县城里有n个用地道相连的房子,第i个只与第i-1和第i+1个相连.这是有m个消息依次传来 1.消息为D x:鬼子将x号房子摧毁了,地道被堵上. 2.消息为R :村民们将鬼子上一个摧毁的房子修复了. 3.消息为Q x:有一名士兵被围堵在x号房子中. 李云龙收到信息很紧张,他想知道每一个被围堵的士…
https://www.luogu.org/problemnew/show/P1503 题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. 题目描述 描述 县城里有n个用地道相连的房子,第i个只与第i-1和第i+1个相连.这是有m个消息依次传来 1.消息为D x:鬼子将x号房子摧毁了,地道被堵上. 2.消息为R :村民们将鬼子上一个摧毁的房子修复了. 3.消息为Q x:有一名士兵被…
题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. 题目描述 描述 县城里有n个用地道相连的房子,第i个只与第i-1和第i+1个相连.这是有m个消息依次传来 1.消息为D x:鬼子将x号房子摧毁了,地道被堵上. 2.消息为R :村民们将鬼子上一个摧毁的房子修复了. 3.消息为Q x:有一名士兵被围堵在x号房子中. 李云龙收到信息很紧张,他想知道每一个被围堵的士兵能够到达的房子有几个…
题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. 题目描述 描述 县城里有n个用地道相连的房子,第i个只与第i-1和第i+1个相连.这是有m个消息依次传来 1.消息为D x:鬼子将x号房子摧毁了,地道被堵上. 2.消息为R :村民们将鬼子上一个摧毁的房子修复了. 3.消息为Q x:有一名士兵被围堵在x号房子中. 李云龙收到信息很紧张,他想知道每一个被围堵的士兵能够到达的房子有几个…
题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. 题目描述 描述 县城里有n个用地道相连的房子,第i个只与第i-1和第i+1个相连.这是有m个消息依次传来 1.消息为D x:鬼子将x号房子摧毁了,地道被堵上. 2.消息为R :村民们将鬼子上一个摧毁的房子修复了. 3.消息为Q x:有一名士兵被围堵在x号房子中. 李云龙收到信息很紧张,他想知道每一个被围堵的士兵能够到达的房子有几个…
鬼子进村 fhq-treap 题面 观察题目发现可用平衡树做:每次鬼子拆家即从平衡树中加入被拆的节点:每次村民修房子都向平衡树中删除该节点:每次查询时,只需要求出其后驱与前驱,易知nxt-pre-1为答案. 使用\(\text{fhq-treap}\)实现平衡树部分 #include <cstdio> #include <cstdlib> #define MAXN 50005 using namespace std; struct nod{ int sl,sr,val,rnd,sz…
[题解] Luogu P5446 [THUPC2018]绿绿和串串 ·题目大意 定义一个翻转操作\(f(S_n)\),表示对于一个字符串\(S_n\), 有\(f(S)= \{S_1,S_2,...,S_{n-1},S_n,S_{n-1},...S_2,S_1 \}\). 现在给定一个长度为\(n\)的字符串\(S^{'}\)表示原字符串\(S\)经过若干次(可能为0)旋转之后的一个前缀, 求原来字符串可能的长度\(l\). 显然当\(l > n\)时一定可行,所以只需要输出所有的\(l\leq…
关于这道题, 我们可以发现移动顺序不会改变答案, 具体来说, 我们有以下引理成立: 对于一个移动过程中的任意一个移动, 若其到达的位置上有一个棋子, 则该方案要么不能将所有棋子移动到最终位置, 要么可以通过改变顺序使这一次移动合法 证明: 考虑到达位置上的那个棋子, 如果它没有到达最终位置, 则我们考虑将该棋子移至下一步, 如果下一步还有没有到达最终位置的棋子, 则也移动它 否则直接调换这两个棋子的移动顺序即可 好的我们去除了题目中的要求: 「移动过程中不能出现多颗棋子同时在某一格的情况」, 接…
本蒟蒻也来发一次题解第一篇请见谅 这个题有几个要点 1.无向无权图,建图的时候别忘记建来回的有向边[因此WA掉1次 2.无权嘛,那么边长建成1就好了2333333 3.最短路采用迪杰斯特拉(别忘用堆优化)来做,计数操作改装进去,ans[1]=1;迪杰斯特拉更新边长的时候如果大于号(具体见代码)就覆盖,相等的话就加上 4.%楼上SPFA,BFS大佬 具体见代码,其实就是在迪杰斯特拉里面填了几笔(逃 代码巨丑(捂脸) #include<cstdio> #include<cstring>…
感谢 @cmy962085349 提供的hack数据,已经改对了. 先声明,我好像是题解里写双$fhq$ $treap$里唯一能过的...(最后两个点啊) 思路:首先看题目,$MIN_GAP_SORT$ 明显是求它的前驱与后继(可能有相同的),所以就用平衡树,但是又要求两个相邻的数的差,就可以有再开一个平衡树存放差值 实现:抛开奇奇怪怪的的题面,主要考虑这三个操作: 1.$INSERT$ $i$ $k$: 这个很简单,用链表就行了(数组模拟的),但是要注意,插入的时候,要接着上一个在这插入的,还…
讲讲这题的几种做法: 暴力匹配法 rt,暴力匹配,即把字符串存起来一位一位判相等 时间复杂度$ O(n^2·m) $ 再看看数据范围 \(n\le10^5,m\le10^3\) 当场爆炸.当然有暴力分 代码(20pts): #include <bits/stdc++.h> using namespace std; char c[100001][1001]; bool pd(int x, int y) { int l1 = strlen(c[x]), l2 = strlen(c[y]); if(…
/*set加速维护*/ #include<iostream> #include<cstdio> #include<cstring> #include<set> #define maxn 100010 using namespace std; set<int>s; set<int>::iterator p; int n,m,a[maxn],top; ]; int init() { ,f=;char s=getchar(); ;s=get…
[APIO2008]免费道路 题目描述 新亚(New Asia)王国有 N 个村庄,由 M 条道路连接.其中一些道路是鹅卵石路,而其它道路是水泥路.保持道路免费运行需要一大笔费用,并且看上去 王国不可能保持所有道路免费.为此亟待制定一个新的道路维护计划. 国王已决定保持尽可能少的道路免费,但是两个不同的村庄之间都应该一条且仅由一条 且仅由一条免费道路的路径连接.同时,虽然水泥路更适合现代交通的需 要,但国王也认为走在鹅卵石路上是一件有趣的事情.所以,国王决定保持刚好 K 条鹅卵石路免费. 举例来…
题目链接 思路 将哪些村庄已经被摧毁了放到treap里.查询的时候如果当前村庄已经被毁了,那么就可以直接输出0.不然就输出这个村庄的后继-前驱-1.原因显然 代码 #include<cstdio> #include<iostream> #include<cstdlib> #include<cmath> #include<ctime> #include<bitset> #define ls TR[cur].ch[0] #define r…
终于来到了Qtree3, 其实这是Qtree系列中最简单的一道题,并不需要线段树, 只要树链剖分的一点思想就吼了. 对于树链剖分剖出来的每一根重链,在重链上维护一个Set就好了, 每一个Set里存的都是重链中的黑点, 深度就是关键字. 考虑每一种操作 0 : 改变颜色 在他所在的重链上插入一个黑点或者earse掉 1 : 查询 就像树链剖分一样, 一直往上跳重链头然后更新答案即可 代码较短 #include <bits/stdc++.h> #define maxn 101000 #define…
来一篇不那么慢的状压??? 话说这题根本没有紫题难度吧,数据还那么水 我是不会告诉你我被hack了 一看数据规模,n≤12,果断状压. 然后起点要枚举,就设dp状态: f[i][j]=以i为起点到j状态的最小花费 其中j是一个二进制数(用十进制来表示)第i位的1.0分别表示是否已经到达第i点(1表示已经到达,0表示还未到达) (因为m很大,n很小,会有重边,所以用邻接矩阵(e[u][v])) 由此可以列出状态转移方程: f[i][j]=min{f[i][k]+diss[i][k][u]*e[u]…
这题是真的水啊... ------------ 昨天模拟赛考了这题,很多人都是O($n^3$)水过,但我认为,要做就做的足够好(其实是我根本没想到O($n^3$)的做法),然后就开始想O(n)的解法. 首先看题目,前面一大堆看似是废话,其实还是有很大用处的. 问题描述中提到了树的中心,但后面却貌似没有用到,其实中心是给我们带来提示的. 既然是求最小偏心距,那必然是要在直径上找,不然偏心距并不能有过多的减少,所以第一步,定下在直径上找. 然后直径上找也要讲究方法,假如整条路径在中心的左边或右边,那…
M斐波那契数列 此题对数学基础要求较高 来源矩阵乘法_百度百科 一个m*n的矩阵是一个由m行n列元素排成的矩形阵列.矩阵里的元素可以是数字符号或者数学式. 形如[acbd][abcd]的数表称为二阶矩阵,其中a,b,c,d称为这个矩阵的元素. 形如 [x1x2][x1x2] 的有序对称为列向量 设 A=[acbd]A=[abcd] B=[x1x2]B=[x1x2] 则C=[ax1+bx2ax2+bx1]C=[ax1+bx2ax2+bx1] 称为二阶矩阵A与平面向量B的乘积,记为AB=C 更一般的…
生成函数板子题...... 要写高精,还要NTT优化......异常dl 这个并不难想啊...... 一次召唤会涉及到\(10\)个因素,全部写出来,然后乘起来就得到了答案的生成函数,输出\(n\)次项的系数就好了. 下面把\(10\)个条件列一下 \[1 + x^6 + x^{12} + \cdots = \frac{1}{1-x^6}\] \[1+x^2+x^3+\cdots+x^9 = \frac{1-x^{10}}{1-x}\] \[1+x^2+x^3+x^4+x^5 = \frac{1…
这个柿子挺别致的......还有信仰膜数998244353 直接讲正解吧...... 首先发现这个柿子从上往下算好像不怎么行,我们从下往上看,(下面令\(Ans_r = sum_{k,1,r}\)). 考虑\(a_i\)对\(Ans_r\)的贡献(\(1 \le i \le r\)),即\(a_i\)在\(sum_{k,1,r}\)中被算了多少次,我们假设\(a_i\)被算了\(c_i\)次.答案就是\(Ans_r = \sum\limits_{i = 1} ^ r a_i c_i\) 废话.…
分治FFT的板子为什么要求逆呢 传送门 这个想法有点\(cdq\)啊,就是考虑分治,在算一段区间的时候,我们把他分成两个一样的区间,然后先做左区间的,算完过后把左区间和\(g\)卷积一下,这样就可以算出左区间里的\(f\)对右边的贡献,然后再算右边的就好了. 手玩一组样例吧:g=[0,3,1,2](默认\(g[0] = 0\)) 一开始,只有f[0]=1 f: [1 0|0 0] 然后我们从中间分开来,先算左边的 f: [1|0|0 0] 然后在分下去我们会找到\(f[0]\),就拿这一段和\(…
三模NTT 不会... 都0202年了,还有人写三模NTT啊... 讲一个好写点的做法吧: 首先取一个阀值\(w\),然后把多项式的每个系数写成\(aw + c(c < w)\)的形式,换句话说把多项式\(f(x)\)写成两个多项式相加的形式: \[ f(x) = wf_0(x) + f_1(x) \] 这样在这道题中取\(W = 2^{15}\)就可以避免爆long long了. 乘起来的话就是 \[ f \cdot g = (w f_0 + f_1)(wg_0 + g_1) = (f_0 g…
妈妈我终于会这道题了! 设\(n\)个点的有根仙人掌个数的指数型生成函数(EGF)为\(F(x)\), 令\(f_i = [x^n]F(x)\) 对于\(f_i\), 我们考虑钦点\(1\)号点为根, 然后考虑与\(1\)相邻的是什么 \(1\)不在环上: 对于这种情况, 我们可以发现与它相邻的还是一颗仙人掌, 于是它的生成函数还是\(F(x)\) \(1\)不在环上: 对于这种情况, 我们考虑环的大小\(i\), 那么去除点\(1\), 它的生成函数就是\(F^i(x)\), 但是考虑到对称的…
有一种神奇的算法叫做floodfill 就是一个n*m的矩阵,a[i][j]为当前高度,我们可以任选一个点倒水,开始bfs,如果要搜的点没有被搜到过,并且高度小于当前的点,我们就把这个点加入队列中 而这道题我们可以用floodfill做 先假设有解,也就是说假设干旱区里的所有城区都能建水利措施. 对于第一行湖泊,显然我们bfs往下floodfill覆盖的最后一行肯定是个区间,那么对于第一行两个点floodfill后覆盖的最后一行的两个区间,如果左边端点floodfill的右边一部分与右边端点fl…
平衡树实际很简单的 以下讲解都以Luogu P3369 [模板]普通平衡树为例 我不会带指针的Splay,所以我就写非指针型的Splay Splay是基于二叉查找树(bst)实现的 什么是二叉查找树呢?就是一棵树呗,但是这棵树满足性质:一个节点的左孩子一定比它小,右孩子一定比它大 比如: 这就是一棵最基本二叉查找树 对于每次插入,它的期望复杂度大约是lognlogn级别的,但是存在极端情况,比如9999999 9999998 9999997.....1这种数据,会直接被卡成n^2级别 在这种情况…
P1503 鬼子进村 题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. 题目描述 描述 县城里有n个用地道相连的房子,第i个只与第i-1和第i+1个相连.这是有m个消息依次传来 1.消息为D x:鬼子将x号房子摧毁了,地道被堵上. 2.消息为R :村民们将鬼子上一个摧毁的房子修复了. 3.消息为Q x:有一名士兵被围堵在x号房子中. 李云龙收到信息很紧张,他想知道每一个被围堵的士…