做完之后看了一圈题解没发现用二分的,那本蒟蒻就来写一下二分吧

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long//某人不开long long最后一个样例没过
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using ll = long long;
const int M = 10000010;
const int INF = 0x3f3f3f3f;
int n, m, k, T;
int x;
int a[M];
int sum[M];
bool check(int r,int l){
    return sum[r]-sum[l-1]>=x;
}
signed main()
{
    IOS;
    cin>>n>>x;
    for(int i=1;i<=n;++i){
        cin>>a[i];
        sum[i]=sum[i-1]+a[i];
    }
    int l=INF,len=INF;
    for(int i=1;i<=n;++i){
        //二分右端点,i表示的是左端点
        int L=i+1;int R=n;
        int cur=INF;
        while(L<=R){
            int mid=(L+R)>>1;
            if(check(mid,i)){
                R=mid-1;
                cur=mid-i;
            }else {
                L=mid+1;
            }
        }
        if(cur<len){
            len=cur;
            l=i;
        }else if(cur==len) {
            if(i<l){
                l=i;
                len=cur;
            }
        }//其实这一段不要也无所谓,前面得到的结果l更小
    }
    cout<<l<<" "<<l+len;
    return 0;
}