文章目录

题解 CF1840C Ski Resort

由 hycqwq 发布

Problem

给定一个序列 aa,问在其中有多少个连续的长度不小于 kk 且所有数不大于 qq 的子序列。

Solution

读入时统计在 aia_iaia_i 前面有多少个不大于 qq 的数,设其为 did_i,于是以 aia_i 结尾的复合条件的子序列个数为 max{0,dik+1}\max\{0, d_i - k + 1\}。累加即可。

Code

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <string>
#include <cstring>
#include <cctype>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <map>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int inf = 0x3f3f3f3f;
#define elif else if
#define il inline

int t, n, k, q, a[200005];

int main()
{
    cin >> t;
    while (t--)
    {
        cin >> n >> k >> q;
        int d = 0;
        ll ans = 0;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i];
            if (a[i] <= q)
                d++;
            else
                d = 0;
            ans += max(0, d - k + 1);
        }
        cout << ans << endl; 
    }
    return 0;
}
C++

暂无评论

发表评论