题意 给定一个长度为n的序列a1~an,从中选取一段长度在s到t之间的连续一段使其平均值最大.(n<=100000) 题解 二分答案平均值. judge时把每一个a[i]-mid得到b[i] 在b[i]中找到一段合法的串使其权值和最大. 当最大权值和大于等于0时则mid上移. 求最大权值和用单调队列就行.(预处理b[i]的前缀和sum[i],队列中记录当前位置可选区间的最小的sum[i]) #include <iostream> #include <cstdio> #incl…
题目描述 给定一个长度为n的序列a_i,定义a[i]为第i个元素的价值.现在需要找出序列中最有价值的“段落”.段落的定义是长度在[S,T]之间的连续序列.最有价值段落是指平均值最大的段落, 段落的平均值=段落总价值/段落长度. 输入输出格式 输入格式: 第一行一个整数n,表示序列长度. 第二行两个整数S和T,表示段落长度的范围,在[S,T]之间. 第三行到第n+2行,每行一个整数表示每个元素的价值指数. 输出格式: 一个实数,保留3位小数,表示最优段落的平均值. 输入输出样例 输入样例#1: 复…
洛谷题目传送门 费了几个小时杠掉此题,如果不是那水水的数据的话,跟列队的难度真的是有得一比... 话说蒟蒻仔细翻了所有的题解,发现巨佬写的都是倍增,复杂度是\(O(n\log n\log nw)\)的,貌似还不够优秀. 其实我们与其对于每一个点都通过倍增向上找到对应位置,还不如直接从上到下dfs一遍,判断:如果当前点子树内初始位置最浅的军队与当前点距离不超过\(mid\),或者所有子树都被封锁,那么当前点也被封锁. 这样以后再二分,时间复杂度降至\(O(n\log nw)\).其它部分的思路Da…
题目链接 Solution 转化一下,就是个单调队列. 可以发现就是一段区间 \([L,R]\) 使得其高度的极差不小于 \(d\) ,同时满足 \(R-L\) 最小. 然后可以考虑二分然后再 \(O(n)\) 判断, 时间复杂度 \(O(nlogn)\) . Code #include<bits/stdc++.h> #define ll long long #define inf 0x3f3f3f3f using namespace std; const int maxn=1000008;…
前言 鉴于这题的题解质量(连LaTeX公式都没有),我决定再发一篇详细的题解,不仅方便大家,还可以作为我学习单调队列优化dp的小结(尽管这题不是dp). 分析 题目要求求一个最大的实数\(x\),使得某长度在\([S,T]\)之间的区间\([L,R]\)满足 \[\frac{\sum_{i=L}^{R}a_i}{R-L+1}=x\] 即 \[\sum_{i=L}^{R}a_i=x*(R-L+1)\] 由于答案满足单调性,所以可以二分\(x\),转化为判断问题,即判断 \[\sum_{i=L}^{…
上学期刷过裸的RMQ模板题,不过那时候一直不理解>_< 其实RMQ很简单: 设f[i][j]表示从i开始的,长度为2^j的一段元素中的最小值or最大值 那么f[i][j]=min/max{d[i][j-1], d[i+2^j-1][j-1]} RMQ的ST算法: void ST() //初始化 { memset(RMQ,,sizeof(RMQ)); ;i<=n;i++) RMQ[i][]=a[i]; ;(<<j)<=n;j++) ;i+(<<j)-<=…
偷懒直接把bzoj的网页内容ctrlcv过来了 2806: [Ctsc2012]Cheat Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1943  Solved: 1004[Submit][Status][Discuss] Description Input 第一行两个整数N,M表示待检查的作文数量,和小强的标准作文库的行数接下来M行的01串,表示标准作文库接下来N行的01串,表示N篇作文 Output N行,每行一个整数,表示这篇作文的Lo…
我们对作文库建出广义后缀自动机.考虑用\(SAM\)处理出来一个数组\(mx[i]\),表示从作文的第\(i\)个位置向左最远在作文库中出现的子串的长度.这个东西可以在\(SAM\)上跑\(trans\)边来实现(其实求出来的是作文前i位在作文库中出现的最长后缀). 处理出来这个东西,我们考虑用\(DP\)求答案.发现直接用\(DP\)求并不是很好求,所以要在外面套一个二分答案.\(DP\)还要用单调队列优化. #include<iostream> #include<cstring>…
题目描述 给定一个长度为n的序列a_i,定义a[i]为第i个元素的价值.现在需要找出序列中最有价值的“段落”.段落的定义是长度在[S,T]之间的连续序列.最有价值段落是指平均值最大的段落, 段落的平均值=段落总价值/段落长度. 输入输出格式 输入格式: 第一行一个整数n,表示序列长度. 第二行两个整数S和T,表示段落长度的范围,在[S,T]之间. 第三行到第n+2行,每行一个整数表示每个元素的价值指数. 输出格式: 一个实数,保留3位小数,表示最优段落的平均值. 输入输出样例 输入样例#1: 3…
题目链接:http://hihocoder.com/contest/hiho38/problem/1 ,挺难想的解题思路,好题. 按照提示的算法来: 我们需要找什么? 在这个题目中我们需要找的是路径最长边.比如存在一条路径{1, p[1], p[2], ... , p[j], T}, p = {p[1],p[2],...,p[j]] }, j < K,我们需要找的为 D(P) = Max{w(1, p[1]), w(p[j], T), Max{w(p[i], p[i+1]) | 1 <= i…