// 二分搜索非常快
// 二分搜索中 lower_bound()返回第一个大于等于
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
ll n,m;
struct node {
int left;
int right;
};
vector<node> res;
ll S[100004];
int main() {
memset(S,0,sizeof(S));
ll x;
cin>>n>>m;
for(int i = 1; i<=n; i++) {
cin>>x;
S[i]=S[i-1]+x;
}
//因为全为整数只要出现A[j]-A[i]>=m则退出即可
ll min_num = INF;
for(int i = 1; i<=n; i++) {
int pos = lower_bound(S+i,S+n+1,S[i-1]+m)-(S+i);
if(S[pos+i]-S[i-1]>=m&&S[pos+i]-S[i-1]<min_num) {
res.clear();
min_num = S[pos+i]-S[i-1];
node t;
t.left =i;
t.right=pos+i;
res.push_back(t);
} else if(S[pos+i]-S[i-1]==min_num) {
node t;
t.left =i;
t.right=pos+i;
res.push_back(t);
}
}
for(int i = 0; i<res.size(); i++) {
printf("%d-%d\n",res[i].left,res[i].right);
}
return 0;
}
07-17
118
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-28
110
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交