为以后出题做准备 NO.3 连续的子串中有多少个满足第k大的数 大于等于m

世界给了我寻找光明的眼眸    却让我在黑暗中独自摸索   我自诩不是什么坏人   但始终成为不了一个好人。

许筱宥百般无聊,便翻起了一起的数学书  看起了数列

一个长度为n的数列,他又写下了一个数m,他想知道这个数列中有多少个区间里的第k大的数不小于m,当然首先这个区间必须连续 至少要有k个数

输入 

第一个数表示有T组事例

然后有n,m,k

最后有长度为n的数组   (0<n<10000)(k>0) (0<m<n)

输出

对于每组数据输出一行一个数表示答案。

#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
#include<iostream>
#include<math.h>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
#define N 10009
int a[N],q[N],qq[N];
int main()
{
    int T,n,m,k;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        int ans=0,sum=0;
        for(int i=1;i<=n;i++)
        {
            if(a[i]>=m)
            {
                q[i]=q[i-1]+1;
                qq[++ans]=i;
            }
            else
                q[i]=q[i-1];
            if(q[i]>=k)
                sum+=qq[q[i]-k+1];
        }
        printf("%d\n",sum);
    }
    return 0;
}
时间: 2024-10-11 04:40:14

为以后出题做准备 NO.3 连续的子串中有多少个满足第k大的数 大于等于m的相关文章

【滴滴笔试】1.连续数组的最大和 2.找出数组中第K大的数

1 import java.util.Arrays; 2 import java.util.Scanner; 3 public class Main { 4 public static void main(String args[]){ 5 Scanner scanner = new Scanner(System.in); 6 while (scanner.hasNext()){ 7 String str = scanner.nextLine(); 8 String[] arrStr = str

两个字符串的最长连续公共子串

LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题.引入: LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题. 比如: String str1 = new String("adbccadebbca");  String str2 = new String("edabccadece");str1与str2的公共子串就是bccade. 解法就是用一个矩阵来记录两个字符串中所

算法学习(十二)最大连续乘积子串、字符串编辑距离

最大连续乘积子串 题目描述:给一个浮点数序列,取最大乘积连续子串的值,例如-2.5,4,0,3,0.5,8,-1,则取出的最大乘积子串为3,0.5,8.也就是说,上述数组中,3,0.5,8这3个数的乘积3*0.5*8 = 12是最大的,而且是连续的. 分析: 注意子串和字序列的区别. 子串:是串的连续的部分. 子序列:是串中不改变顺序,但是是去掉个别元素的到新的序列. 1,连续数的乘积,最简单的就是穷举法,就是区间[i-j]之间的数的乘积,和最大值max比较,最后输出max.但是时间复杂度很大几

NFL原则告诉我们做决策的时候,试图找到一个能解决所有问题,“大而全”的方案是不存在的。我们应当找到最关心的问题,因地制宜做出选择。——聚焦目标,取舍有道!

资源匮乏原则:有限的资源无法满足无穷的需要及欲望:因此想要多一点的某件东西,意味着必须放弃一些其他的东西:因为资源匮乏,所以我们必须做出选择. NFL原则:没有免费午餐定理(No Free Lunch)是wolpert和Macerday提出的"最优化理论的发展"之一.意思是不可能不付出就获得好处. 其结论是,我们比较两种算法A与B:1. 对于所有的问题,A并不总是优于B:2. 对于所有的问题,特定算法并不总是比随机算法好. 经济学原理告诉我们,做决策的时候,试图找到一个能解决所有问题,

最大连续乘积子串

1 /* 2 A="2,9,-1,3,7,0,8,9,-3",求最大连续乘积子串,有三种方法,方法一:采用动态规划方法,最容易理解,也最容易实现,方法二:同样采用动态规划的 3 思路,但是不用保存两个数组空间.方法三:采用记录最大值,最小值的方法 4 */ 5 6 /* 7 动态规划方法,,两个数组,最大和最小,max[i]以i结尾的序列中最大连续乘积. 8 maxnum[i]=max{maxnum[i-1]*A[i],minnum[i-1]*A[i],A[i]}; 9 minnum[

连续递增子串最长长度的数学期望

参考 [1]: longest consecutive subsequence of a random permutation     第一个帖子:         Theorem: The expected length of the longest increasing block in a random permutation of {1,2,…,n} is r0(n)+O(1) as n→∞, where r0(n) is the smallest positive integer su

找出所有最长连续重复子串及其个数

问题描述: 找出字符串中所以最长连续重复子串及其个数 比如:输入:123234,最大连续重复字符串为23,个数为2 输入:5555,最大连续重复字符串为555,个数为2 输入:aaabbb 最大连续重复字符串为aa,个数为2:和bb,个数为2 必须存在重复的字符串才算,只出现一次的不算.可能存在多个相同长度的不同字符串,比如aaabbb. 分析:最直接的想法是利用两个指针循环遍历比较所有可能的子串,记录下所有子串长度,然后找到所有最大连续子串及其个数,时间复杂度为O(n^2).在网上看到一种利用

spoj687 后缀数组重复次数最多的连续重复子串

REPEATS - Repeats no tags A string s is called an (k,l)-repeat if s is obtained by concatenating k>=1 times some seed string t with length l>=1. For example, the string s = abaabaabaaba is a (4,3)-repeat with t = aba as its seed string. That is, the

动态规划题目(三)——最大连续乘积子串

动态规划题目(三)--最大连续乘积子串 1. 题目描述 给一个浮点数序列,取最大乘积连续子串的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积连续子串为3,0.5,8.也就是说,上述数组中,3 0.5 8这3个数的乘积30.58=12是最大的,而且是连续的. 2. 动态规划求解 动态规划求解题目的时候最重要的是要找到状态转移方程! 针对这道题目,我们使用两个变量记录当前最大值maxEnd, 和当前最小值minEnd.为什么记录当前最小值呢?因为数组中会出现负数,乘以一个负数的话