codeforces 1676F

一道练习双指针的好题
题目链接

题目大意

给定 n n n个元素的数组 a a a,和正整数 k k k,需要你找到一组左右边界 l l l& r r r,使得 r − l r-l rl最大,并且使得每一个 x x x ( l < = x < = r ) (l<=x<=r) (l<=x<=r),在整个数组中至少出现 k k k

思路

读题不难看出,因为要满足每一个 x x x,所以我们需要找一组连续的子段
又发现我们需要找到满足出现次数的,所以我们可以先预处理一下数组,选出大于等于 k k k次的存到 v e c t o r vector vector里,因为数据是 1 e 9 1e9 1e9的,所以用不了桶了,我们用一个 m a p map map存,然后对 v e c t o r vector vector排序
关于双指针,有”形式“左边界和”输出“左边界和”输出“右边界,表示用于更新和输出的元素,如果相邻的元素相差大于 1 1 1就更新“形式”左边界是右边元素,用一个变量 m x mx mx存距离,如果当下元素减去“形式”左边界大于 m x mx mx了,说明又更大的,所以更新 m x mx mx,更新”输出“左边界和”输出“右边界

ACcode

#include<bits/stdc++.h>

using namespace std;

const int M = 2e5 + 9;
int a[M];

void solve() {
    int n, k;cin >> n >> k;
    for (int i = 0;i < M;i++)a[i] = 0;
    map<int, int>mp;

    for (int i = 1;i <= n;i++) {
        cin >> a[i];
        mp[a[i]]++;
    }

    vector<int>c;
    for (auto x : mp)if (x.second >= k)c.push_back(x.first);
    if (!c.size()) {
        cout << -1 << '\n';
        return;
    }

    sort(c.begin(), c.end());
    int ri = c[0];int le = c[0];
    int l = c[0];
    int mx = 0;
    for (int i = 1;i < c.size();i++) {
        if (c[i] - 1 != c[i - 1]) {
            l = c[i];
            continue;
        }
        if (c[i] - l > mx) {
            mx = c[i] - l;
            le = l;
            ri = c[i];
        }
    }
    cout << le << ' ' << ri << '\n';
}

int main() {
    int t;cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}

相关推荐

  1. codeforces 1676F

    2023-12-27 07:40:01       42 阅读
  2. Codeforces Round 916 (Div. 3)(A~F)

    2023-12-27 07:40:01       46 阅读
  3. Codeforces Round 935 (Div.3 E F)

    2023-12-27 07:40:01       23 阅读
  4. CodeForces Round 925 Div.3 A-F 题解

    2023-12-27 07:40:01       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-27 07:40:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-27 07:40:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-27 07:40:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-27 07:40:01       20 阅读

热门阅读

  1. latexshop 使用bug:xxx has a comma at the end

    2023-12-27 07:40:01       36 阅读
  2. c++ qt QtWidgetsApplication 项目 使用外部ui

    2023-12-27 07:40:01       40 阅读
  3. GO基础进阶篇 (八)、runtime包

    2023-12-27 07:40:01       45 阅读
  4. k8s解决 搭建集群的时候notReady问题

    2023-12-27 07:40:01       40 阅读
  5. 【Go语言入门:Go程序的流程控制语句】

    2023-12-27 07:40:01       35 阅读
  6. client-go使用方法

    2023-12-27 07:40:01       41 阅读
  7. Unity编辑器紫色

    2023-12-27 07:40:01       35 阅读
  8. mysql如何分析sql是否成功使用索引

    2023-12-27 07:40:01       43 阅读
  9. 专属于程序员烂漫的表白||Python画动态爱心

    2023-12-27 07:40:01       43 阅读