zoukankan      html  css  js  c++  java
  • 连续区间和大于等于某个数(弱化版)

    题目描述::

    给你一个数组a(长度<=1e6)和整数m,要求有多少个连续区间和大于等于m;

    输入描述::

    第一行两个整数  c,m 分别表示数组大小和m

    第二行 c个数组元素,0<c[i]<1e5;

    输出描述::

    一个整数表示所求的个数

    思路分析::

    假设区间 l~r 满足要求,当你再找寻合法区间是,要麽 l 右移 要麽 r 右移,这样就跟明显了

    代码:复杂度  O(n)

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 #define pii pair<int,int>
     4 using namespace std;
     5 const int maxn=1e6+5;
     6 int c[maxn];
     7 
     8 int main()
     9 {
    10     int n,m;
    11     scanf("%d%d",&n,&m);
    12     for(int i=1;i<=n;i++){
    13         scanf("%d",&c[i]);
    14     }
    15     ll sum=0,ans=0;
    16     int j=1;
    17     for(int i=1;i<=n;i++){
    18         sum+=c[i];
    19         if(sum>=m){
    20             ans+=(n-i+1);
    21             while(j<=i){
    22                 sum-=c[j];
    23                 if(sum>=m){
    24                     ans+=(n-i+1);
    25                     j++;
    26                 }
    27                 else{
    28                     break;
    29                 }
    30             }
    31         }
    32     }
    33     printf("%lld
    ",ans);
    34     return 0;
    35 }
    纵使单枪匹马,也要勇闯天涯
  • 相关阅读:
    分苹果
    马拉车算法(求最长回文子串)
    KMP
    字典树
    关于子类和父类中的this的用法
    最长上生子序列LIS
    sass
    黑马程序员----java基础笔记下(毕向东)
    DOM
    ajax教程
  • 原文地址:https://www.cnblogs.com/sj-gank/p/12011137.html
Copyright © 2011-2022 走看看