zoukankan      html  css  js  c++  java
  • XidianOJ 1099 A simple problem

    题目描述

    一个长度为N的数组A, 所有数都是整数 ,0 <= A[i] <= 1000000,1 <= i <= N,1 <= N <= 100000,对于 任意i,j ,1 <=  i  <=  j  <= N,[i, j]中所有数为原数组的一个子区间, 现在要求子区间的和小于等于K的子区间有多少个, 0 <=  K  <= 10000。

    虽然xry111很SB,但还是在O(N)的时间复杂度内就做出了这题,你呢?

                  

    输入

    第一行整数T 代表数据组数,1 <= T  <=  12

    每组数据第一行 整数 N, K。

    接下来一行N个整数,  由空格隔开。

    输出

    输出子区间的和小于等于K的子区间的个数。 每组输出占一行。

    --正文

    明明是简单的题,却做了半天。。。

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    typedef long long LL;
    long long a[100001];
    int n,k,i,j;
    int main(){
        int time,T; scanf("%d",&T);
        for (time=1;time<=T;time++){
            int now = 1;
            LL sum = 0,res = 0;
            scanf("%d %d",&n,&k);
            for (i=1;i<=n;i++){
                scanf("%lld",&a[i]);
                sum += a[i];
                if (sum <= k) {
                    res += i - now + 1;
                }
                else {
                    while (sum > k){
                        sum = sum - a[now]; now ++;
                    } 
                    res += i - now + 1;
                } 
            }
            printf("%lld
    ",res);
        }
        return 0;
    }
  • 相关阅读:
    PHP session
    PHP范例注册审核
    php文件操作
    JSON 弹窗
    PDO
    CSP-S2020 游记
    Meissel-Lehmer算法 学习笔记
    [AGC046C] Shift 题解
    Min_25筛学习笔记
    GDOI2020 游记
  • 原文地址:https://www.cnblogs.com/ToTOrz/p/6169490.html
Copyright © 2011-2022 走看看