$ CH~0805~ $ 防线 (二分值域,前缀和,特殊性质) $ solution: $ 注意博主所给题面的输出和原题有些不同 这道题当时想了很久很久,就是想不到怎么写.果然还是太 $ vegetable $ 了.首先我们可以肯定的是,我们不能暴力枚举,复杂度太高,数据范围太大!所以我们需要从题目中寻找性质! 题目说了要寻找一个数目为奇数的点,本来以为自己在二进制是与否这方面已经很有经验,但是这道题反手打脸.奇偶数是一个以二进制很有关的东西:(奇数+奇数=偶数)类似( 1 异或 1 = 0 )…
Chapter 2 二分与前缀和 +++ 二分 套路 如果更新方式写的是R = mid, 则不用做任何处理,如果更新方式写的是L = mid,则需要在计算mid是加上1. 1.数的范围 789 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> //整数二分 using namespace std; int st[100005]; int n, q; in…
题意 lsp 学习数学竞赛的时候受尽了同仁们的鄙视,终于有一天......受尽屈辱的 lsp 黑化成为了黑暗英雄Lord lsp.就如同中二漫画的情节一样,Lord lsp 打算毁掉这个世界.数学竞赛界的精英 lqr 打算阻止Lord lsp 的阴谋,于是 她集合了一支由数学 竞赛选手组成的超级行动队.由于队员们个个都智商超群,很快,行动队便来到了 Lord lsp 的黑暗城堡的下方. 但是,同样强大的 Lord lsp 在城堡周围布置了一条"不可越过"的坚固防线.防线由很 多防具组成…
题目链接:http://poj.org/problem?id=3061 题意:给一个长为n的数列和整数s,求一个连续的子序列,使得这个子序列长度最短并且不小于这个整数s. 统计[1~i]的子序列和sum(i),(sum(0)=0).然后求一个区间[i,j]的和即为sum(j)-sum(i-1) (i > 0). 由于给定序列没有负数,因此sum是个严格不减的序列. 转换成一个求最大值最小的问题,可以二分枚举序列长度,在前缀和上计算子序列[i-1,i+m-1]的和.如果存在一个满足子序列和≥s的,…
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6406 思路: 暴力,预处理三个前缀和:[1,n]桃子会被摘掉,1到当前点的最大值,1到当前点被摘掉的桃子的数量,然后我们枚举修改p点造成的所有影响,: 1,假如新输入的点比原先的点的值更大,那么我们对修改后p这个点的值和[1,p-1]的最大值关系进行分析,也就是分析前半段的影响:(1)如果p点大于1-p-1的最大值的时候我们直接利用前缀和O(1)得到[1,p-1]有多少个桃子被摘掉,然后加上当前这个.(…
https://www.vijos.org/d/SUOI/p/59dc5af7d3d8a1361ae62b97 二分一个答案,然后做一做前缀和,用满足区间大小的最小值减一减,判断答案合不合法 然而还要输出一个最小的区间 太毒瘤了 但其实最后答案中最小区间的端点就只能是刚才做的那个最小值,因为如果不是最小值,那这个答案一定不是最优的 然后再随便对比一下就完事了 (感觉什么都没说清,看代码吧代码好看代码也不好看) #include<bits/stdc++.h> #define pa pair<…
题目传送门:http://codeforces.com/contest/1119/problem/D D. Frets On Fire time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input output standard output Miyako came to the flea kingdom with a ukulele. She became good friend…
美丽的题号预示着什么... 描述 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从1到n逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是: 1.给定m个区间[Li,Ri]: 2.选出一个参数W: 3.对于一个区间[Li,Ri],计算矿石在这个区间上的 检验值Yi: 这批矿产的 检验结果Y 为各个区间的检验值之和 .即: Y1+Y2...+Ym 若这批矿产的 检验结果 与所给标准值S相差太多,就需要再去检验另一批矿产.小T不想费时间去检验另一批矿产,…
题目链接 : https://www.acwing.com/problem/content/141/ #include <bits/stdc++.h> using namespace std; ; ; struct Palindromic_Tree { //cnt最后count一下之后是那个节点代表的回文串出现的次数 int next[MAXN][N] ;//next指针,next指针和字典树类似,指向的串为当前串两端加上同一个字符构成 int fail[MAXN] ;//fail指针,失配后…
$Luogu$ $Sol$ 首先$W$一定是某个$w_i$.于是一种暴力方法就出炉了,枚举$W$再计算. 注意到,满足$S-Y$的绝对值最小的$Y$只可能是两种,一种是$<S$的最大的$Y$,一种是$>S$的最小的$Y$.那就分别求出来叭.分别求的时候这个$W$的值是可以二分的.但是这样并不能$A$掉这题,因为$check$的复杂度仍然是$O(NM)$的.看了题解之后发现$check$可以用前缀和吖,觉得很巧妙$qwq$.这样下来$check()$的复杂度变成$O(N+M).$ $Code$…
二分 一道藏的很深的二分题... 题目保证只有一个点有奇数个防具,这个是突破口. 因为 奇数+偶数=偶数,我们假设某个点x,如果有奇数点的防具在x的左边,那么x的左边的防具总数一定是奇数,右边就是偶数 所以我们可以用这个来二分. 至于统计防具的公式,那就是小学学过的等差数列项数=(末项-首项)/公差+1.. #include <bits/stdc++.h> #define INF 0x3f3f3f3f #define full(a, b) memset(a, b, sizeof a) usin…
题意 题目链接 给出一个矩形,每个点都有一些值,每次询问一个子矩阵最少需要拿几个数才能构成给出的值 Sol 这题是真坑啊.. 首先出题人强行把两个题拼到了一起, 对于前$50 \%$的数据,考虑二分答案. 用$f[i][j][k]$表示从$(1, 1)$到$(i, j) >= k$的个数,$g[i][j][k]$表示从$(1, 1)$到$(i, j) >= k$的和 这两个数组都可以递推出来 对于后$50 \%$,直接用主席树维护.. mdzz死活有一个点RE.. #include<cs…
2600: [Ioi2011]ricehub Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 691  Solved: 359[Submit][Status][Discuss] Description 乡间有一条笔直而长的路称为"米道".沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ≤ i <R,稻田 i 的坐标 X[i]满足 1 ≤ X[…
Code: #include <cstdio> #include <algorithm> #include <cstring> #define setIO(s) freopen(s".in","r",stdin) #define maxn 1000000 #define ll long long using namespace std; char str[maxn]; int arr[maxn],pos[maxn],x[maxn]…
题意 题目链接 Sol 考场上做完前四题的时候大概还剩半个小时吧,那时候已经困的不行了. 看了看E发现好像很可做?? 又仔细看了几眼发现这不是sb题么... 先考虑两个人,假设贡献分别为\((x, y) (a, b)\) 有两种组合方式,一种是\(x + b\),另一种是\(y + a\) 若\(x + b >= y + a\) 那么\(x - y >= a - b\) 因此我们按照\(x - y\)排序,对于每个位置,肯定是某一个前缀全选\(x+b\),除此之外都是\(y+a\) 二分之后前…
地址 http://poj.org/problem?id=3061 解法1 使用双指针 由于序列是连续正数 使用l r 表示选择的子序列的起始 每当和小于要求的时候 我们向右侧扩展 增大序列和 每当和大于等于要求的时候 我们将子序列左边的数字剔除 看能是在减少长度情况下 还能保持子序列和满足要求 这样在指定起点下的满足要求的最短子序列和都会被记录 然后在比较出最短长度的子序列 如图 代码 #include <iostream> #include <vector> #include…
二分与前缀和 文章目录 二分与前缀和 二分 整数二分核心思想 整数二分模板 整数二分步骤总结: 题目链接 实数二分核心思想: 题目链接 三分法思想: 二分 难点:二分的边界问题 整数二分核心思想 确定一个区间,使得目标值一定在区间中. 找一个性质满足:(对于百分之95的二分拥有这个性质) 性质具有二段性. 答案是二段性的分界点. 整数二分模板 对于整数二分我们分为两类: 有的小伙伴就要问了:为什么是分成2类而不是1类3类呢? 答:我们来看这么一种情况 对于一组序列如下:要求找到值为5的第一个数和…
题目分析: 用"$"连接后缀数组,然后做一个主席树求区间内不同的数的个数.二分一个前缀长度再在主席树上求不同的数的个数. 代码: #include<bits/stdc++.h> using namespace std; ; ; int m,n,k; string hmk[maxn],str; int sum[maxn]; int sa[maxn],rk[maxn],X[maxn],Y[maxn]; ],Tnum; long long ans[maxn]; struct no…
题目链接 BZOJ 洛谷 每个国家的答案可以二分+求前缀和,于是可以想到整体二分. 在每次Solve()中要更新所有国家得到的值,不同位置的空间站对应不同国家比较麻烦. 注意到每次Solve()其国家数是与区间大小相关的,so根据国家处理,区间更新空间站的值,用vector枚举对应空间站得到每个国家的值.(or边表) //20048kb 11292ms //1316ms 24.8MB #include <cstdio> #include <cctype> #include <…
Description A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, and a positive integer S (S < 100 000 000) are given. Write a program to find the minimal length of the subsequence of consecutive elements o…
状态压缩 P5369 题意:求所有排列下的最大前缀和之和 一步转化: 求最大前缀和的前缀由数集S组成的方案数, 统计答案时直接乘上sum(S)即可 考虑最大前缀和的性质: 设最大前缀和为sum[i] 到i的后缀均为正数 i后的前缀均为负数 令sum[i] = 集合 i 内所有数的和. 令f[i] = 集合 i内的数组成的排列,最大前缀和 = sum[i]的方案数. 令g[i] = 集合 i内的数组成的排列,所有的最大前缀和都 < 0 的方案数. 代码: #include<iostream>…
输入一个长度为n的整数序列,从中找出一段长度不超过m的连续子序列,使得子序列中所有数的和最大. 输入格式 第一行输入两个整数n,m. 第二行输入n个数,代表长度为n的整数序列. 同一行数之间用空格隔开. 输出格式 输出一个整数,代表该序列的最大子序和. 数据范围 1≤n,m≤3000001≤n,m≤300000 输入样例: 6 4 1 -3 5 1 -2 3 输出样例: 7 算法:前缀和 + 单调队列 注意:单调队列需要使用双端队列deque,因为其中需要头部弹出以及尾部弹出. #include…
CF446C题意: 给你一个数列\(a_i\),有两种操作:区间求和:\(\sum_{i=l}^{r}(a[i]+=fib[i-l+1])\).\(fib\)是斐波那契数列. 思路 (一) codeforces 447E or 446C \(fib[n] = \frac{\sqrt5}{5}\times [(\frac{1+\sqrt5}{2})^n-(\frac{1-\sqrt5}{2})^n]\) 有关取模.同余.逆元的一些东西: \(p = 1e9 + 9\) \(383008016^2…
本题题意:在一个矩阵中,去随机一点,设定一个步数K,求出从这个点可以走到的范围的和,求最大值 思路:这个范围的和是一个菱形,我们把他旋转45°,然后成为一个正放的矩阵,求出二维前缀和 然后用前缀和的性质枚举每一块矩阵的大小,更新答案 #include<cstdio> #include<algorithm> using namespace std; ; int a[maxn][maxn]; ][maxn*]; int main() { int n,m,k,x,y,xl,yl,xr,y…
正题 题目链接:https://www.luogu.com.cn/problem/P4983 题目大意 给出长度为\(n\)的序列\(x\),记平均数为\(\bar{x}\),要求将序列分成\(m\)段. 每一段\([l,r]\)的值为 \[\frac{((\sum_{i=l}^rx_i\times \bar x)+\bar x)^2}{\bar x^2} \] 求所有段的值和最小 \(1\leq m\leq n\leq 10^5,1\leq x_i\leq 1000\) 解题思路 直接除以\(…
KMP 第一次接触 \(border\) 都是先从 KMP 开始的吧. 思想在于先对于一个串自匹配以求出 fail 指针(也就是 border) 然后就可以在匹配其他串的时候非常自然的失配转移.在此顺便给出一下 \(border\) 的定义: Border 字符串的某个能与后缀完全匹配的真前缀(即不为原串的前缀). 在 KMP 中我们一般关注最长的 \(border\),然后我们 KMP 中的 fail 实际上就是存储的最长的 \(border\) 的结束的位置(因为是前缀所以可以这样存储).…
Description You are working for Macrohard company in data structures department. After failing your previous task about key insertion you were asked to write a new data structure that would be able to return quickly k-th order statistics in the array…
10.31-11.1Test 题目 描述 做法 \(BSOJ5177\) 求在\(n\)个数里选\(K\)个的所有方案的异或和之和 按位讨论,组合数算 \(BSOJ5178\) 化简\(\displaystyle{f_i=\max_{0\le j<i\vee c_j\mid (i-j)}\{f_j+\frac{c_j}{i-j}\times v_j\}}\) 用单调栈实现斜率优化 \(BSOJ5121\) 同6318 同6318 \(BSOJ5180\) 询问一个矩形元素和/最大值/最小值 二维…
UVa 11572 - Unique Snowflakes 问一个数组中,无重复数字的最长子串长度是多少. 用map维护某数字上次出现的位置.另外用变量last表示上次出现数字重复的位置. 如果出现重复数字,且map[val]>last时,计算当前区间长度,然后last变为map[val]+1. 其他时候增长区间长度即可. 每次遍历一个元素都要更新map[val],用区间长度更新最优解. #include<iostream> #include<vector> #include…
接着上一篇总结--可持久化线段树来整理吧.点击进入 这两种数据结构确实有异曲同工之妙.结构是很相似的,但维护的主要内容并不相同,主席树的离散化.前缀和等思想也要更难理解一些. 闲话 话说刚学习主席树的时候百度了一下,看到了"主席树"这一名字的由来-- 线段树竟然是被一个黄嘉泰的大佬因不会划分树来代替的,,,,,因缩写是HJT取名为主席树= =!orz 我的内心瞬间感到了不安......(看我的名字,就在右边) 能跟神犇有相同的缩写是何等荣幸!看来这个主席树我得好好学了. 那么接下来进入…