本文主要是介绍Numbers of interval,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
现在有一个数组,请计算有多少的区间[l,r] (l≤r)满足区间内所有数之和大于等于k.
输入格式
第一行输入n,k(1≤n,k≤10 6 ^{6} 6).
接下来输入n个数,第i个数为a i _{i} i(1≤ai≤10 3 ^{3} 3).
输出格式
输出满足条件的区间个数
样例
input
3 5
2 3 5
output
4
思路: 这道题我用的前缀和,因为所有数都是整数,所以当一个区间满足条件时再加上任意数都满足题意,如果不做此处理会超时。
代码:
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
long long a[1001110],b[1001110],c[1001110];
int main()
{int n,m;while(cin>>n>>m){memset(b,0,sizeof(b));int i,j;for(i=1;i<=n;i++){cin>>a[i];b[i]=b[i-1]+a[i]; }long long sum=0;for(i=n;i>=1;i--){for(j=i;j>=0;j--){if(b[i]-b[j]>=m){sum+=(long long)(j+1);//如果从j到i这个区间的数之和大于等于m则加上从0到j的任意个数都满足条件break;} }}cout<<sum<<endl;}return 0;
}
这篇关于Numbers of interval的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!