NOI.AC 32 Sort——分治】的更多相关文章

题目:http://noi.ac/problem/32 从全是0和1的情况入手,可以像线段树一样分治下去,回到本层的时候就是左半部的右边是1,右半部的左边是0,把这两部分换一下就行.代价和时间一样是nlogn. 不全是0和1,可以像快速排序一样,先找一个基准,然后小于它的是0.大于它的是1,调用上一行的那个函数:本层弄好0和1以后,递归到全是0的部分和全是1的部分即可.这样代价和时间都是nlog^2n. 那个基准找得不好的话,一不小心就陷入死循环.所以自己还专门unique了一下,确保不会递归到…
链接 50分做法(只有0,1) 根据归并排序的思想,假设我们现在已经把 \(l\dots mid\) 和 \(mid+1\dots r\) 排好序 只要把左边连续的1和右边连续的0翻转即可 inline bool check(int l,int r){REP(i,l+1,r)if(a[i-1]>a[i])return 0;return 1;} inline void reverse_sort(int l,int r){ if(check(l,r))return; int mid=l+r>>…
传送门 分析 快排的原理是以任意一个数为标准,然后把所有小于它的数换到它的左边,所有大于它的数换到它的右边.我们就使用快排的思路,分治整个区间.对于每个区间以排好序的这个数列的中间位置的值为标准,然后继续分治这个区间,将这个区间左子区间中大于标准的移到左子区间的最右边,将右子区间中小于标准的移到右子区间的最左边,然后翻转左子区间右侧的一部分一直到右子区间的左侧的一部分这一段区间即可.注意为了防止标准在某些情况下变成一个小于区间最小值或大于区间最大值等奇怪情况,我们将原来的读入的a[i]乘上n之后…
\(des\) 给定长度为 \(n\) 的数组,要求翻转一段区间 \([l, r]\) 使其升序排列. 要求 \(\sum r - l + 1 <= 2e7\) \(sol\) 考虑快速排序,每次选择一个 \(mid\),把 \(<= mid\) 的数放大左边, \(>= mid\) 的数放到右边,递归下去. 把 \(<= mid\) 的数看做 \(0\), \(>= mid\) 的数看做 \(1\), 就相当于 \(0/1\) 序列排 序,类似归并排序,每次把左右两部分排好…
正题 题目链接:http://noi.ac/problem/2266 题目大意 给出\(n\)个点的一棵树,有一些边上有中转站(边长度为\(2\),中间有一个中转站),否则就是边长为\(1\). \(m\)次询问一个东西从\(x\)出发走到\(y\),每隔\(k\)步中转站会关闭一次(\(k\)的倍数步走完后不能在中转站上).求在关闭多少次以内可以到达 \(1\leq n,m\leq 10^5\) 解题思路 发现最多只需要走\(2n\)步,然后每隔\(k\)步关闭一次,所以可以考虑根号分治. 先…
正题 题目链接:http://noi.ac/problem/2007 题目大意 \(n\)个格子排成一排,每个格子有一个\(0/1\)和一个颜色.开始每个格子都是\(0\),\(q\)次操作取反一个颜色的所有格子的\(0/1\),然后询问\(1\)的格子构成的连通块数量. \(1\leq n,q\leq 10^5\) 解题思路 可以理解为总共的\(1\)格子数减去相邻的\(1\)格子对数. 转换一下模型,每队相邻的颜色\(x,y\)之间连接一条边. 现在问题变为了每次删除或者加入一个点,求连通子…
NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出现一次. 对于每一个正整数\(k=1,..,n+1\),求出的本质不同的长度为\(k\)的子序列的数量.对\(10^9+7\)取模. 思路: 由于只会有一个数会重复,因此考虑重复的这个数取\(0\)个.\(1\)个和\(2\)个的情况,用组合数直接算即可. 源代码: #include<cstdio>…
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下.左.右.左上.左下.右上.右下这\(8\)个方向移动.其中每一个皇后可以攻击这八个方向上离它最近的皇后. 求有多少皇后被攻击到\(0,1,\ldots,8\)次. 保证\(m\)个皇后中任意两个不在同一个位置. 思路: 考虑左右方向的攻击,对每一行开一个set,按列编号插入,看一下是否存在前驱/后…
NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗糖果的愉悦度为\(A_i\),而第二家商店中的第\(i\)颗糖果的愉悦度为\(B_i\). 在每家商店买的糖果会被打包到一个袋子中(可以在一家商店什么都不买,此时认为这家商店的袋子为空).因为这两个袋子外观是一样的,所以会从两个袋子中随机选择一个,然后吃光里面的糖果.定义一种买糖果的方案的愉悦度为:…
NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\(w_i\)的代价.现在要通过删去一些边,使得剩下的满足对于这个图的任意一些点,这些点之间互联的边数小于这些点的总点数.求总代价最小值 思路: 不难发现答案为整张图代价和-最大生成森林代价和. 时间复杂度\(\mathcal O(m\alpha(n))\). 源代码: #include<cstdio…
NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不相同.\(q(q\le5\times10^5)\)次询问,每次给出\(x,y\),询问有多少数满足在本行是第\(x\)大,在本列是第\(y\)大. 思路: 对每行.每列分别排序,求出每个数是本行.本列第几大.然后即可预处理答案. 时间复杂度\(\mathcal O(n^2\log n)\). 源代码…
noi.ac上的一套(假)NOI题 本来想着可以刷点通过量的,结果发现好像并不是这样的. 整数 description 给你\(n,p\),要你求\(\sum_{k=1}^n\sum_{i=1}^k\sum_{j=1}^k\gcd(i,j,k) \mod p\). \(n\le3\times10^8\) sol \[\sum_{k=1}^n\sum_{i=1}^k\sum_{j=1}^k\gcd(i,j,k)=\sum_{d=1}^nd\sum_{k=1}^n\sum_{i=1}^k\sum_{…
正题 题目链接:http://noi.ac/problem/2139 题目大意 给出\(n\)个数字的序列\(a_i\).然后选出一个不降子序列最大化子序列的\(a_i\)和减去没有任何一个数被选中的区间数量. \(1\leq n\leq 10^6,1\leq a_i\leq 10^8\) 解题思路 嗯,考虑朴素的\(dp\)方程,设\(f_i\)表示以\(i\)为末尾的值就有 \[f_i=f_j+a_i+\frac{(i-j-1)(i-j)}{2} \] 然后展开整理一下都乘二就是 \[f_i…
在ubuntu 下编译snappy时,在检查依赖关系时,处理autoconf的包时,在相关依赖包都已经安装的情况下,报如下错误,死活不过. configure.ac:32: error: possibly undefined macro: AC_DEFINE 几经辗转,在stackoverflow上找到解决方案: justinclift commented on 15 Mar 2013 As possibly useful info if anyone else hits the "possib…
NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1]+xor[j-1]^xor[i]); 01trie树求最大异或和相信大家都会.不会看这里. 这与我们今天这个题目有关吗? 毫无关系. xor[i]的某一位为1,xor[j]的那一位不管是啥,贡献都是为1. 而xor[i]的某一位为0,xor[j]的贡献是2或0.(xor[j]位上为1贡献为2) (…
题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个连通块合为一个,故考虑以连通块为切入点设计$DP$设字符串$s_1s_2s_3...s_i,s_1 \geq s_2 \geq s_3 \geq ... \geq s_i$表示某一个图中各个连通块的大小(可以发现我们只关心连通块有多大,但不关心连通块内具体有哪些点,因为当所有连通块大小一一对应的时候…
NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]ImpossibleGame…
4C(容斥) http://noi.ac/contest/56/problem/25 同时交换一行或一列对答案显然没有影响,于是将行列均从大到小排序,每次处理限制相同的一段行列(呈一个L形). 问题变成,决定这个L形中每个位置的高度,是每个位置都不超出所在行列的限制,且每行每列都有至少一个位置达到最高限制. 容斥,暴力枚举有多少行多少列没有任何一个位置达到最高限制,这些行列中的位置都只能取到0~h.其余L形中的位置都无限制,即能取到0~h+1. #include<cstdio> #includ…
题目:http://noi.ac/problem/31 模拟 kruscal 的建最小生成树的过程,我们应该把树边一条一条加进去:在加下一条之前先把权值在这一条到下一条的之间的那些边都连上.连的时候要保证图的连通性不变. 已经加了一些树边之后,图的连通性是怎样的呢?这可以是一个整数划分的问题.据说方案只有4万多,所以可以搜一下,搜出有 k 个连通块的方案数. 为了转移和转移时算方案数,还要记录每个方案的:各个连通块的点数,所有的空位(可放边)数. 可以用 map 来存状态. map 的角标是一个…
题目:http://noi.ac/problem/31 好题啊! 题意很明白,对于有关最小生成树(MST)的题,一般是要模拟 Kruskal 过程了: 模拟 Kruskal,也就是把给出的 n-1 条边一条一条加进去,那么就要枚举每次连接了哪两个连通块(点集): 于是需要记录连通块情况,这样加一条边就相当于一种情况到另一种情况的转移,就可以DP: 记录连通块情况较为复杂,而且还要注意不重复等等... 但实际上,我们在转移时,并不需要知道连通块中有哪些点,只要知道连通块的大小即可(从n个1开始转移…
闲谈: 最后一个星期还是不浪了,做一下模拟赛(还是有点小虚) #30.candy 题目: 有一个人想买糖吃,有两家商店A,B,A商店中第i个糖果的愉悦度为Ai,B商店中第i个糖果的愉悦度为Bi 给出n,W,表示每个商店都有n个糖果且两个商店的每个糖果的价格都是W 求出最大的min(Sa,Sb)-D*W 其中Sa表示在A商店买的糖果的愉悦度之和,Sb表示在B商店中买的糖果的愉悦度之和,D表示总共在两家商店买的糖果数 题解: 直接乱搞,贪心想一想,每次取糖果肯定先从愉悦度大的取为优 那么我们只要在取…
题目链接:http://noi.ac/contest/12/problem/37 题目: 小W收到了一张纸带,纸带上有 n个位置.现在他想把这个纸带染色,他一共有 m 种颜色,每个位置都可以染任意颜色,但是他发现如果某连续 m 个位置被染成了 m 种不同的颜色,那么就不美观,于是他决定让任意的相邻 m 个位置的颜色至少有两个位置相同.他想知道他一共有多少种染色的方案. 输入格式 第一行三个整数 n,m,p. 输出格式 输出一行一个整数,表示答案对 p 取模的结果. 题解: 我们考虑DP,设序列为…
题目链接:戳我 可以知道,我们相当于是把有宝藏在的地方围了一个圈,求这个圈最小是多大. 显然按照dfs序来遍历是最小的. 那么我们就先来一遍dfs序列,并且预处理出来每个点到根的距离(这样我们就可用\(dis[u]+dis[v]-2*dis[lca(u,v)]\)来表示u,v之间的距离) 怎么动态维护这个东西呢?平衡树?不存在的,开一个set就行了.每次维护一下添加或者删除产生的影响就行了. 相似的题目是noi.ac#460 tree-- 给你一棵n个点的树,每个点都有一个颜色ci. 有m次操作…
正题 题目链接:http://noi.ac/problem/2144 题目大意 给出一个字符串\(s\)和一个序列\(a\).将字符串\(s\)的所有本质不同子串降序排序后,求有多少个区间\([l,r]\)使得子串\(s_{l,r}\)排名等于\(a_{l\sim r}\)的和. \(1\leq n\leq 2\times 10^5\) 解题思路 因为是降序排序,所以每加一个字符排名是在下降的,而\(a_i\)的和又是不降的,所以对于每个左端点最多只有一个右端点,且可以考虑二分求出这个位置. 如…
[题解] 跟51nod 1105差不多. 二分答案求出第L个数和第R个数,check的时候再套一个二分或者用two pointers. 最后枚举ai在b里面二分,找到所有范围内的数,排序后输出. 注意最后找到的数可能多于R-L+1,需要考虑这一点. #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define LL long long #define rg re…
题面 传送门 重要思想 真的是没想到,我很久以来一直以为总会有应用的$BFS$序,最终居然是以这种方式出现在题目中 笔记:$BFS$序可以用来处理限制点对距离的题目(综合点分树使用) 思路 本题中首先询问可以拆成两个:所有同色点对距离大于$L-1$的种数减去所有同色点对距离大于$R$的种数 考虑如何解决点对距离大于$k-1$: 我们考虑树的$bfs$序,假设当前按照$bfs$序加入了点$u$,深度为$d$ 考虑树里另外两个已经加入了的点$x,y$,显然它们的深度都小于等于$d$ 那么有结论:如果…
题意 给你 \(n\) 个串 \(s_{1\cdots n}\) ,每次询问给出 \(l,r,k\) ,问在 \(s_{l\cdots r}\) 中出现了多少次 \(s_k\) . \(n,q,\sum|s|\le 10^5\) 分析 先建AC自动机的 \(fail\) 树, 我们考虑两种暴力: 将 \(l​\) 到 \(r​\) 中的每个串的末尾节点子树标记,查询 \(s_k​\) 的所有节点 \(fail​\) 树到根的路径和. 将 \(s_k\) 的每个节点的子树标记,查询 \(l\) 到…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 有一天你学了一个叫能求出有向图中所有的强连通分量的算法,你决定将这个算法应用到NOI比赛中. 这是一道交互题.交互库有一张有向图,图中有 n 个点和 m 条有向边.为了与交互库交互,你可以进行如下操作: 给定一个点 x 和一些点构成的一个集合 S,交互库将会回答是否存在一条从点 x 到 S 中的任何一个点的有向边. 给定一个点 x 和一些点构成的一个集合 S,交…
正题 题目链接:https://www.luogu.com.cn/problem/CF587F 题目大意 给出\(n\)个字符串\(s\).\(q\)次询问给出\(l,r,k\)要求输出\(s_{l..r}\)在\(s_k\)中出现了多少次. \(1\leq n,q,\sum |s_i|\leq 10^5\) 解题思路 考虑一个比较暴力的做法,先把所有的构出一棵\(AC\)自动机,一个串\(S\)有后缀\(T\)当且仅当在\(fail\)树上\(S\)的节点在\(T\)的子树内. 所以暴力的做法…
题解 排队 20% 1≤n≤20,1≤x,hi≤201\le n\le 20, 1\le x,h_i\le 201≤n≤20,1≤x,hi​≤20 随便暴力 50% 1≤n≤2000,1≤x,hi≤1e91\le n \le 2000, 1\le x,h_i\le 1e91≤n≤2000,1≤x,hi​≤1e9 枚举把哪个定成中位数 100% 1≤n≤2e5,1≤x,hi≤1e91\le n\le 2e5,1\le x,h_i\le 1e91≤n≤2e5,1≤x,hi​≤1e9 先把高度排序.贪…