C. To Become Max

原题链接

题解

最大值,要么是原本就有,要么是一段向左加一的区间的左端点的值(经过操作之后)

因此,我们可以枚举每一个 ai 能达到的最大值(作为左端点),这样的最大值越大,所需要的 k 越大,因此我们可以二分该最大值,然后查看能否在给定的 k 内得到

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=114514;

ll n,k;
ll a[N]={0};
ll b[N]={0};


bool check(ll h)
{
    for(int i=1;i<=n;i++)
    {
        ll tem=0,need=h;
        bool flag=0;
        for(int j=i;j<=n;j++)
        {
            if(need<=a[j])
            {
                flag=1;
                break;
            }
            else
            {
                tem+=need-a[j];
                need--;
            }
        }
        if(flag&&tem<=k)  return 1;
    }

    return 0;
}

void solve()
{
    cin>>n>>k;

    ll maxs=0;
    for(ll i=1;i<=n;i++)
    {
        cin>>a[i];
    }

    ll l=1,r=2e8;
    while(l+1<r)
    {
        ll mid=(l+r)/2;

        if(check(mid)) l=mid;
        else r=mid;
    }

    cout<<l<<'\n';
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t=1;
    cin>>t;
    while(t--) solve();
    return 0;
}


posted @   纯粹的  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示