zoukankan      html  css  js  c++  java
  • 1495 中国好区间 尺取法

    链接在这里

    问的是一个数字序列中,有多少个第K大的数>=T的区间.

    这题相当于问:有多少个>=K个”满足大于等于T“的元素的区间.

    预处理dp[i]为前i项元素>=T的元素个数之和. 尺取维护L和R.如果dp[R]-dp[L-1]>=k,说明[L,R]这个区间是合法的,那么对于L来说, [L,E],其中E∈[R,N]都是合法的,所以答案+=n-r+1个元素. 注意用ll防止溢出

    #include <bits/stdc++.h>
    using namespace std;
    
    #define ll long long 
    const int maxN=1e7+5;
    int dp[maxN];
    
    int main() {
        ll n, k, T, a, b, c, p;
        cin >> n >> k >> T >> a >> b >> c >> p;
        for (int i = 1; i <= n; ++i) {
            a = (a * b + c) % p;
            dp[i] = dp[i - 1];
            if (a >= T) dp[i] += 1;
        }
    
        ll l = 1, r = k, ans = 0;
        while (1) {
            while (r <= n && dp[r] - dp[l - 1] < k) ++r;
            if (r > n) break;
            ans += n - r + 1;
            ++l;
        }
        cout << ans << "
    ";
        return 0; 
    }
  • 相关阅读:
    12月4日
    12月3日
    12月2日
    12月1日
    11月30日
    11月29日
    11月28日
    11月27日
    jquery mobile-按钮控件
    ap web
  • 原文地址:https://www.cnblogs.com/Rosebud/p/9594548.html
Copyright © 2011-2022 走看看