题意 给定一个长度为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…
一道单调队列的好题 传送门:>Here< 题意:求一个连续子段,其长度在\([S,T]\)之间,使其平均值最大.保留三位小数 解题思路 考虑二分答案,转化为判定问题.设当前二分到\(k\),则一段满足要求的子序列一定满足:\[\dfrac{a[l]+...+a[r]}{r-l+1} \geq k\]于是变形可得\[a[l]+...+a[r] \geq k*(r-l+1)\]也就等同于\[(a[l]-k)+...+(a[r]-k) \geq 0\]于是我们只需要找出一段进行如上处理的序列中,长度…
题目 单调队列+前缀和 #include <bits/stdc++.h> #define N 101001 using namespace std; int n, s, t; int data[N]; double ans, temp[N], sum[N], l = -10000, r = 10000; bool check(double a) { deque <int> q; memset(sum, 0, sizeof(sum)); for (int i = 1; i <=…
https://www.luogu.org/problem/show?pid=1419 题目描述 给定一个长度为n的序列a_i,定义a[i]为第i个元素的价值.现在需要找出序列中最有价值的“段落”.段落的定义是长度在[S,T]之间的连续序列.最有价值段落是指平均值最大的段落, 段落的平均值=段落总价值/段落长度. 输入输出格式 输入格式: 第一行一个整数n,表示序列长度. 第二行两个整数S和T,表示段落长度的范围,在[S,T]之间. 第三行到第n+2行,每行一个整数表示每个元素的价值指数. 输出…
BZOJ_3316_JC loves Mkk_ 二分答案 + 单调队列 题意: 分析: 拆成链,二分答案,奇偶两个单调队列维护最大子段和,记录方案. 代码: #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define N 200050 #define LL…
题目:https://www.luogu.org/problemnew/show/P3957 先二分一个 g,然后判断: 由于转移的范围是一个区间,也就是滑动窗口,所以单调队列优化: 可以先令队尾为 -1,但不真的放进去,为的是第一次判断能否从0走到: 普及组的题也要 Narh 提点... 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using…
题目链接:https://www.luogu.org/problem/P3957 这道题目我用到了如下算法: 线段树求区间最大值: 二分答案: DP求每一次枚举答案g时是否能够找到 \(\ge k\) 的解法. 我们一开始用 \(x[i]\) 和 \(s[i]\) 来表示到起点的距离以及第 \(i\) 个点的分值. 与此同时我们还要算上我们的起点,它满足性质 \(x[0] = s[0] = 0\) ,我们接下来的判断都是建立在这 \(1 + n\) 个点的基础上的. check(g) 首先,我们…
空题段长度即为单调队列长度区间 每次二分答案进行check即可 #include<bits/stdc++.h> using namespace std; ; const int inf=0x3f3f3f3f; int n,t,l,r,mid,ans; int a[N],q[N],f[N]; int head,tail; bool check(int mid){ memset(f,,sizeof f); memset(q,,sizeof q); head=tail=; ;i<=n;i++)…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5090 11月月赛A题 题意概括 给出n个数. 求连续区间(长度大于等于k)最大平均值. 题解 这题大概不是原题. 很简单的题目(对于大佬而不对于我来说),做过一次. 具体做法: 首先二分答案平均值(最好用long double保证精度) 然后根据前缀和来单调队列判断. 假设当前要判断的答案为x. 我们把原序列的每一个数都减去x. 那么前缀和数组的第i个就减掉了i*x 那么我得到了一个新的前缀和数…
偷懒直接把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…