• HDU


    http://acm.hdu.edu.cn/showproblem.php?pid=5806

    题意:给你一个n元素序列,求第k大的数大于等于m的子序列的个数。

    题解:题目要求很奇怪,很多头绪但写不出,选择跳过的题,简称想法题。

    首先考虑区间的更新方法:区间左端l不动,右端r滑动,

    滑到有k个数>=m时,此区间符合条件,并且发现右端点再往右滑到底,此条件一直符合(因为若加入的数小于“第K大的数”,则毫无影响。若不然,加入该数会产生一个新的第k大数,保证>=“第K大的数”>=m)

    所以一找到这个数,ans直接加上n-r+1+1;(要+2,因为r又被更新+1了一下,)

    然后更新一次左区间,如果离开区间的数<n,则毫无影响,该区间继续符合条件。若不然,则重新更新右区间,直到再次找到一个>=k的数。

    这样就是基本线性了。   如果r滑倒头后还找不到,那么gg,跳出循环。

    ac代码:

    #define    _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    const int maxn = 2e5 + 5;
    const int mod= 1e9 + 5;
    int a[maxn], x[maxn];
    int main(){
        int n, m, k;
        int t;
        cin >> t;
        while (t--) {
            cin >> n >> m >> k;
            
            for (int i = 1; i <= n; i++) {
                scanf("%d", &a[i]);
            }
            long long ans = 0;
            int l = 1, r = 1, cnt = 0;
            while (1) {
                while(r <= n&&cnt < k) {
                    if (a[r] >= m)cnt++;
                    r++;
                }
                if (cnt < k) break;
                ans += n - r + 2;
                if (a[l] >= m) cnt--;
                l++;
            }
            cout << ans << endl;
        }
    
    
    }
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    oracle 排序字段自增长
    ORACLE REPLACE函数
    oracle非空不做更新
    Elasticsearch 5.4.3 聚合分组
    Elasticsearch 版本控制
    Elasticsearch 配置同义词
    Elasticseach的评分机制
    实现Ecshop商品跳到淘宝、京东等的购买链接
    修改ECSHOP系统红包序列号规律
    Ecshop后台订单列表增加”商品名”检索字段
  • 原文地址:https://www.cnblogs.com/SuuT/p/8541936.html
Copyright © 2020-2023  润新知