双指针模板题。
思路:

  • 其实没什么好说的,这题都讲烂了,无非是维护两个指针 l,r 来标识前后位置,维护 sum 代表其间的和,若 sum 大于等于 x 就尝试更新答案并移动左指针,若 sum 小于 x 就移动右指针(指针都只向前移动,移动时保证 sum 为 l,r 之间的和)
  • 唯一的麻烦在于边界处理,建议一边想一边写,这样能更方便快速的得出结论
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ull unsigned long long

typedef pair<int, int> pii;
typedef pair<int, char> pic;

const int N = 10000009;
const int mod = 1e9 + 7;

int n, x, a[N];

int main() {
    cin >> n >> x;
    for(int i = 1; i <= n; i ++) scanf("%d", a + i);
    int sum = 0;
    int l = 1, r = 1;
    int ans = N, ansl = N;  /// 分别记录区间长度和区间左端点
    while(r <= n) {
        if(sum >= x) {
            if(r - l < ans)
                ans = r - l, ansl = l;
            sum -= a[l ++];
        } else sum += a[r ++];
    }
    cout << ansl << ' ' << ansl + ans - 1;
    return 0;
}