首页 > 其他分享 >AT_abc341_g [ABC341G] Highest Ratio 题解

AT_abc341_g [ABC341G] Highest Ratio 题解

时间:2024-02-24 09:00:39浏览次数:33  
标签:ABC341G ll limits 题解 sum 200002 long abc341 top

题目传送门

前置知识

单调栈

简化题意

给定一个长度为 \(n\) 的序列 \(a\)。对于所有的 \(l(1 \le l \le n)\),均求出 \(\max\limits_{r=l}^{n} \{ \frac{\sum\limits_{i=l}^{r}a_{i}}{r-l+1} \}\)。

解法

令 \(sum_{i}=\sum\limits_{j=1}^{i}a_{j},P_{i}=(i,sum_{i})\),则有 \(\begin{aligned} \max\limits_{r=l}^{n} \{ \frac{\sum\limits_{i=l}^{r}a_{i}}{r-l+1} \} =\max\limits_{r=l}^{n} \{ \frac{sum_{r}-sum_{l-1}}{r-l+1} \} =\max\limits_{r=l}^{n} \{ \frac{P_{r}.y-P_{l-1}.y}{P_{r}.x-P_{l-1}.x} \} \end{aligned}\)。

从后往前用单调栈维护斜率即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define ull unsigned long long
#define sort stable_sort 
#define endl '\n'
ll a[200002],sum[200002],s[200002],x[200002],y[200002],top=0;
double ans[200002];
double work(ll u,ll v)
{
	return 1.0*(y[v]-y[u])/(x[v]-x[u]);
}
int main()
{
	ll n,i;
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cin>>a[i];
		sum[i]=sum[i-1]+a[i];
		x[i]=i;
		y[i]=sum[i];
	}
	top++;
	s[top]=n;
	for(i=n-1;i>=0;i--)
	{
		while(top>1&&work(i,s[top])<=work(s[top-1],s[top]))
		{
			top--;
		}
		ans[i+1]=work(i,s[top]);
		top++;
		s[top]=i;
	}
	for(i=1;i<=n;i++)
	{
		printf("%.8lf\n",ans[i]);
	}
	return 0;
}

标签:ABC341G,ll,limits,题解,sum,200002,long,abc341,top
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18030708

相关文章

  • P10139 [USACO24JAN] Nap Sort G 题解
    DescriptionBessie正在尝试使用她自己的排序算法对一个整数数组进行排序。她有一堆共\(N\)(\(1\leN\le2\cdot10^5\))个整数\(a_1,a_2,\ldots,a_N\)(\(1\lea_i\le10^{11}\)),她将会按排序顺序将这些数放入一个单独的数组中。她反复查找这堆数中的最小数,将其删除,同时将其添加到......
  • UOJ228/HDU5828 基础数据结构练习题/Rikka with Sequence 题解(势能线段树)
    势能线段树。如果线段树上一个节点的\(\max-\min\ge2\),我们称其为关键节点,考虑定义势能\(\phi\)为线段树上关键节点的个数。对于每次开方操作,如果当前节点为关键节点,则暴力递归左右儿子修改,否则:如果当前节点\(\max=\min\)或\(\max=\min+1\)且\(\max\)不是完全平方数,......
  • UVA12421 (Jiandan) Mua (I) - Lexical Analyzer 题解
    蒟蒻的第一篇紫题题解!题目传送门思路一眼模拟,还是大模拟。不由得想起了我编了\(4\)个小时的猪国杀……输入首先处理输入,这里我们用一个字符串数组来存储所有的输入,然后再进行处理。while(getline(cin,sr))str[++cnt]=sr+'\n';处理时需要双重循环,注意如果遍历到空格要跳......
  • CF916E Jamie and Tree 题解
    题目链接:CF或者洛谷本题难点在于换根LCA与换根以后的子树范围寻找,重点讲解先说操作一,假如原根为\(1\)变为了\(x\),又变为了\(y\),那么其实\(y\)和\(x\)都可以看做由\(1\)变化而来的,即\(1\rightarrowx\)与\(1\rightarrowy\),原因很简单,我们可以把\(1\rightar......
  • P9901 『PG2』弯曲半平面直线同向图最大流 题解
    思路正解想不出,只好用网络流了网络流简介请戳这儿。这道题数据有点大用EK求最大流似乎过不了,所以本蒟蒻采用Dinic算法。Dinic算法Dinic算法相当于EK的优化。在原基础找增广路的基础上添加了一个分层操作,再通过深搜找阻塞流。分层从原点开始我们把可以通过一步到达的......
  • 记录pyinstaller 打包 pdfplumber 问题解决过程
    今天有一个pdf文件处理需求,使用pdfplumber库完成,python环境是3.11+win10pyinstaller5.10.1打包完成后,工具可以顺利打开,但是执行处理的时候报错File"pypdfium2_raw\bindings.py",line93,in<module>File"pypdfium2_raw\bindings.py",line83,in_register_library......
  • blazor 问题解决
    Cannotprovideavalueforproperty'ScrollToLocationHash'ontype'Microsoft.AspNetCore.Components.Routing.Router'.Thereisnoregisteredserviceoftype'Microsoft.AspNetCore.Components.Routing.IScrollToLocationHash'.异常信息......
  • Jenkins构建提示docker命令权限问题解决方法
    参考:https://zhuanlan.zhihu.com/p/568513293使用Jenkins构建时使用的用户为jenkins在使用docker命令时会报以下错误ERROR:permissiondeniedwhiletryingtoconnecttotheDockerdaemonsocketatunix:///var/run/docker.sock:Get"http://%2Fvar%2Frun%2Fdocker.soc......
  • P6646 [CCO2020] Shopping Plans 题解
    好好玩的题。思路对于前\(K\)小方案问题。我们可以考虑当前方案对下一个方案的转移。重点在于转移的最优化与不重不漏。只有一种种类假设没有\(l,r\)的限制怎么做。我们不妨把所有价格排序。发现一种状态转移到另一种状态,无异与将其中已选择的一个物品不选,选择他后面......
  • ABC341总结
    ABC341总结Score:1825Rank:737F其实按照题意,原图可能有环,但是因为转移有权值限定,转换一下就是DAG,进行拓扑排序。GAK所差最后一题,使用数形结合思想,x轴为数组下标,y轴为值域。题意是给出左端点,右端点任意,求区间平均值最大进行前缀和处理,然后会惊奇的发现,平均数转化成了两点间......