链接:https://ac.nowcoder.com/acm/contest/11211/F
来源:牛客网
题目描述
读入n,xn,xn,x,给出nnn个数a[1],a[2],……,a[n]a[1],a[2],……,a[n]a[1],a[2],……,a[n],求最小的区间[l,r][l,r][l,r],使a[l]+a[l+1]+……+a[r]≥xa[l]+a[l+1]+……+a[r]≥xa[l]+a[l+1]+……+a[r]≥x,若存在相同长度区间,输出lll最小的那个
输入描述:
第一行两个数,n(1≤n≤10000000),x(1≤x≤10000)
第二行n个数a[i](1≤a[i]≤1000)
输出描述:
输出符合条件l,r(保证有解)
示例1
输入
10 20
1 1 6 10 9 3 3 5 3 7
输出
3 5
分析:在线处理,用双指针来表示区间的头和尾
#include<stdio.h>
int main(){
int a,b,sum=0,z=0,y=0,q=99999;
int i,j=1;
scanf("%d %d",&a,&b);
int x[a+1];
for(i=1;i<=a;i++){
scanf("%d",&x[i]);
sum=sum+x[i];
while(sum>=b){
if(i-j<q){
q=i-j;
z=j;
y=i;
}
sum=sum-x[j++];
}
}printf("%d %d",z,y);
}