「NOI2019」序列】的更多相关文章

题目传送门:LOJ #3158. 题意简述: 给定两个长度为 \(n\) 的正整数序列 \(a,b\),要求在每个序列中都选中 \(K\) 个下标,并且要保证同时在两个序列中都被选中的下标至少有 \(L\) 个,使得选中的下标对应的数的总和最大. 题解: 题目相当于要求在两个序列中选出 \(K\) 对数,不妨一对一对地选. 有个结论是说,上一步的最优决策一定不会再反悔,就是已经选的不会再撤销. 然后做完了,用堆维护一些东西,精细实现就好了. 下面是代码,复杂度 \(\mathcal{O}\lef…
NKOJ卡常卡不过QAQ description 给两个A,B序列,让你分别在A,B中各选k个数,其中至少有L对下标相等. Solution 把问题转化为至多选n-K对下标不同的对. 配对问题就用费用流-- 同坐标A,B两两连边. 然后有一个虚拟点,所有点A连向它,它又连向所有点B.代表不同下标的点配对.这个点还要拆成两个虚拟点(中间容量为n-K). 接着模拟费用流 (注意这次的模拟费用流的反悔功能是利用贪心实现的) 过程中记录\(flow\)为剩下的流量(还能选不同下标的对数) 1.直接选两个…
loj3161「NOI2019」I 君的探险(随机化,整体二分) loj Luogu 题解时间 对于 $ N \le 500 $ 的点,毫无疑问可以直接 $ O(n^2) $ 暴力询问解决. 考虑看起来最好做的 $ B $ 类. 由于有每个点的父亲编号小于该点的优良特性,很容易想到整体二分. 考虑用整体二分求出每个点的父亲: 对于一个分治区间,毫无疑问 $ [l,mid] $ 的节点的父亲在左区间. 而对于另外一半节点,考虑将左半节点全部modify,此时右半某个节点亮起则说明左半节点至少有一个…
Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k\).第一次修改之前及每次修改之后,都要求你找到一个同样长度为 \(n\) 的单调不降序列 \(B_1, \ldots , B_n\),使得 \(\sum_{i=1}^n (A_i −B_i)^2\) 最小,并输出该最小值.需要注意的是每次操作的影响都是独立的,也即每次操作只会对当前询问造成影响.为…
「HNOI2016」序列 有一些高妙的做法,懒得看 考虑莫队,考虑莫队咋移动区间 然后你在区间内部找一个最小值的位置,假设现在从右边加 最小值左边区间显然可以\(O(1)\),最小值右边的区间是断掉的,但注意它是单调的 于是每个点假装向左边第一个小于它的位置连边,就可以处理出前缀和一样的东西,然后预处理后也是\(O(1)\)的 Code: #include <cstdio> #include <cctype> #include <algorithm> #include…
「SDOI2017」序列计数 思路: 矩阵快速幂: 代码: #include <bits/stdc++.h> using namespace std; #define mod 20170408 #define ll long long struct MatrixType { int n,m; ll ai[][]; void mem(int n_,int m_) { n=n_,m=m_; ;i<=n;i++) ;v<=m;v++) ai[i][v]=; } MatrixType op…
#2051. 「HNOI2016」序列 题目描述 给定长度为 n nn 的序列:a1,a2,⋯,an a_1, a_2, \cdots , a_na​1​​,a​2​​,⋯,a​n​​,记为 a[1:n] a[1 \colon n]a[1:n].类似地,a[l:r] a[l \colon r]a[l:r](1≤l≤r≤N 1 \leq l \leq r \leq N1≤l≤r≤N)是指序列:al,al+1,⋯,ar−1,ar a_{l}, a_{l+1}, \cdots ,a_{r-1}, a_…
「JSOI2014」序列维护 传送门 其实这题就是luogu的模板线段树2,之所以要发题解就是因为学到了一种比较NB的 \(\text{update}\) 的方式.(参见这题) 我们可以把修改操作统一化,视为 \(ax + b\) 的形式,然后我们按照原来的套路来维护两个标记,分别代表 \(a\) 和 \(b\) ,那么我们的更新就可以这么写: inline void f(int p, int atag, int mtag, int l, int r) { t[p].sum = (t[p].su…
题面: 1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 5367  Solved: 2323[Submit][Status][Discuss] Description 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术含量……这样 我也出一道题,我出这一道的目的是为了让大家以后做这种题…
题目描述 给定一个长为n的整数序列(n<=1000),由A和B轮流取数(A先取).每个人可从序列的左端或右端取若干个数(至少一个),但不能两端都取.所有数都被取走后,两人分别统计所取数的和作为各自的得分.假设A和B都足够聪明,都使自己得分尽量高,求A的最终得分. 输入输出格式 输入格式: 第一行,一个正整数T,表示有T组数据.(T<=100) 接着T行,每行第一个数为n,接着n个整数表示给定的序列. 输出格式: 输出T行,每行一个整数,表示A的得分 输入输出样例 输入样例#1: 复制 2 1…