单调性:都是正数,区间越大,越容易达成>=x的条件 因此用滑动窗口

j是区间右边界,开区间,每次循环将j位置的值加入,j跳转下一位置,

若此时sum >= x,开始尝试缩小左区间,即sum -= a[i++];

如果是满足条件的最短区间,更新l, r, len

编号从1开始,输出前将l和r自增

#include <bits/stdc++.h>
using namespace std;

int main() {
  int n, x;
  cin >> n >> x;
  vector<int> a;
  a.reserve(n);
  for (int i = 0; i < n; i++){
    int num;
    cin >> num;
    a.push_back(num);
  }
  int l, r;
  int len = INT_MAX;
  for (int i = 0, j = 0, sum = 0; j < n; j++){
    sum += a[j];
    while (sum - a[i] >= x){
      sum -= a[i++];
    }
    if (sum >= x && j - i < len){
      l = i;
      r = j;
      len = j - i;
    }
  }
  l++,r++;
  cout << l << ' ' << r;
  return 0;
  
}
// 64 位输出请用 printf("%lld")