对于平均数相关的常见处理办法

如果要求子区间中全部数字的平均数大于100,可以先将区间中全部数字都减100,然后再判断区间和是否大于0,这样就可以避免平均数的值和区间长度相关的问题。

例题:

AcWing 4487. 最长连续子序列

复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

int a[1000020];
LL psum[1000020];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        a[i]-=100;
        psum[i]=psum[i-1]+a[i];
    }
    vector<int> down;
    down.push_back(0);
    int res=0;

    for(int i=1;i<=n;i++)
    {
        int l=0,r=down.size()-1;
        while(l<r)
        {
            int mid=(l+r)/2;
            if(psum[down[mid]]<psum[i]) r=mid;
            else l=mid+1;
        }
        if(psum[down[l]]<psum[i]) res=max(res,i-down[l]);
        if(psum[i]<psum[down.back()]) down.push_back(i);
    }
    cout<<res<<endl;
}
View Code
复制代码

 

posted @   80k  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示