题目链接:https://codeforces.com/contest/1417/problem/C

题意

给出一个大小为 $n$ 的数组 $a$,计算当 $k$ 从 $1$ 到 $n$ 取值时在所有 $k$ 长区间中出现的数的最小值。

题解

记录一个值两两间的最大距离,该距离的 $k$ 长区间及之后更长的区间都可能以该值为最小值。

Tips

注意两端的处理。

代码一

#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> pre(n + 1), dis(n + 1);
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
dis[x] = max(dis[x], i - pre[x]);
pre[x] = i;
}
for (int i = 1; i <= n; i++) {
if (pre[i]) {
dis[i] = max(dis[i], n + 1 - pre[i]);
}
}
vector<int> ans(n + 1, 1e9);
for (int i = 1; i <= n; i++) {
ans[dis[i]] = min(ans[dis[i]], i);
}
for (int i = 2; i <= n; i++) {
ans[i] = min(ans[i], ans[i - 1]);
}
for (int i = 1; i <= n; i++) {
cout << (ans[i] == 1e9 ? -1 : ans[i]) << " \n"[i == n];
}
}
return 0;
}

代码二

#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<vector<int>> pos(n + 1, {0});
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
pos[x].push_back(i);
}
for (int i = 1; i <= n; i++) {
pos[i].push_back(n + 1);
}
vector<int> dis(n + 1);
for (int i = 1; i <= n; i++) {
if (pos[i].size() > 2) {
for (int j = 1; j < int(pos[i].size()); j++) {
dis[i] = max(dis[i], pos[i][j] - pos[i][j - 1]);
}
}
}
vector<int> ans(n + 1, 1e9);
for (int i = 1; i <= n; i++) {
ans[dis[i]] = min(ans[dis[i]], i);
}
for (int i = 2; i <= n; i++) {
ans[i] = min(ans[i], ans[i - 1]);
}
for (int i = 1; i <= n; i++) {
cout << (ans[i] == 1e9 ? -1 : ans[i]) << " \n"[i == n];
}
}
return 0;
}

参考博客

https://www.cnblogs.com/petjelinux/p/13742723.html

Codeforces Round #673 (Div. 2) C. k-Amazing Numbers(思维)的更多相关文章

  1. Codeforces Round #673 (Div. 2)

    [Codeforces Round #673 (Div. 2) ] 题目链接# A. Copy-paste 思路: 贪心的策略.每次只加上最小的就可以了 #include<bits/stdc++ ...

  2. Codeforces Round #521 (Div. 3) E. Thematic Contests(思维)

    Codeforces Round #521 (Div. 3)  E. Thematic Contests 题目传送门 题意: 现在有n个题目,每种题目有自己的类型要举办一次考试,考试的原则是每天只有一 ...

  3. Codeforces Round #673 (Div. 2) A. Copy-paste(贪心)

    题目链接:https://codeforces.com/contest/1417/problem/A 题意 给出一个大小为 $n$ 的数组 $a$,每次操作可以选择两个数,然后将一个数加到另一个数上, ...

  4. Codeforces Round #506 (Div. 3) - D. Concatenated Multiples(思维拼接求是否为k的倍数)

    题意 给你N个数字和一个K,问一共有几种拼接数字的方式使得到的数字是K的倍数,拼接:“234”和“123”拼接得到“234123” 分析: N <= 2e5,简单的暴力O(N^2)枚举肯定超时 ...

  5. Codeforces Round #673 (Div. 2) B. Two Arrays(数学)

    题目链接:https://codeforces.com/contest/1417/problem/B 题意 定义 $f(a)$ 为数组 $a$ 中满足: $i < j$ $a_i + a_j = ...

  6. Codeforces Round #673 (Div. 2) D. Make Them Equal(数论/构造)

    题目链接:https://codeforces.com/contest/1417/problem/D 题意 给出一个大小为 $n$ 的正整数数组 $a$ ,每次操作如下: 选择 $i,j$ 和 $x$ ...

  7. Codeforces Round #544 (Div. 3) E. K Balanced Teams (DP)

    题意:有\(n\)个人,每个人的能力值是\(a_i\),现在你想将这些人分成\(k\)组(没必要全选),但是每组中最高水平和最低水平的人的能力差值必须\(\le 5\),问最多能选多少人. 题解:想了 ...

  8. Codeforces Round #673 (Div. 2) C. k-Amazing Numbers (DP,思维)

    题意:有一组数,分别用长度从\([1,n]\)的区间去取子数组,要求取到的所有子数组中必须有共同的数,如果满足条件数组共同的数中最小的数,否则输出\(-1\). 题解:我们先从后面确定每两个相同数之间 ...

  9. Codeforces Round #673 (Div. 2) B. Two Arrays (贪心)

    题意:给你一组数\(a\)和一个数\(T\),将这组数分为两组\(c\)和\(d\),定义\(f(x)\)为数组\(x\)中任意两个不同元素的和为\(T\)的个数,问为了使\(min(f(c)+f(d ...

随机推荐

  1. 【递推】P1028数的计算

    题目相关 题目描述 我们要求找出具有下列性质数的个数(包含输入的正整数 n). 先输入一个正整数 n(n ≤1000),然后对此正整数按照如下方法进行处理: 不作任何处理: 在它的左边加上一个正整数, ...

  2. dhcp分发地址以及静态路由设置

    路由器R1配置: system-view [Huawei]sysname R1 [R1]user-interface console 0 [R1-ui-console0]idle-timeout 0 ...

  3. rm: cannot remove `/tmp/localhost-mysql_cacti_stats.txt': Operation not permitted

    [root@DBslave tmp]# chown zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt

  4. 【Linux】实现端口转发的rinetd

    Linux下端口转发一般都使用iptables来实现,使用iptables可以很容易将TCP和UDP端口从防火墙转发到内部主机上.但是如果需要将流量从专用地址转发到不在您当前网络上的机器上,可尝试另一 ...

  5. 【Oracle】修改oracle中SGA区的大小

    1.备份数据库: 2.关机,拔下电源和各种连接线,抽出机箱,打开机箱上盖,增加内存: 3.完成后按原样将各个部件及连接线恢复好,电开机,系统正常运行: 4.进入系统查看,发现内存已经顺利安装: 5.修 ...

  6. MySQL索引性能分析

    为什么要做性能分析 你有没有这样的情况. 面对一个你没怎么写过的.复杂的业务,你构思了很久,终于开始敲下了第一段代码. 写的过程迷迷糊糊,有的时候还能把自己搞晕了. 但你还是终于把它写完了. 但是点击 ...

  7. 利用容器逃逸实现远程登录k8s集群节点

    某天, 某鱼说要吃瞄, 于是...... 李国宝:边缘计算k8s集群SuperEdge初体验 ​ zhuanlan.zhihu.com 图标 照着上一篇文章来说,我这边边缘计算集群有一堆节点. 每个节 ...

  8. 《进击吧!Blazor!》第一章 1.初识 Blazor

    作者介绍 陈超超 Ant Design Blazor 项目贡献者 拥有十多年从业经验,长期基于.Net技术栈进行架构与开发产品的工作,Ant Design Blazor 项目贡献者,现就职于正泰集团 ...

  9. Nginx基础环境搭建

    1.下载docker toolbox https://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ 2.选择好安装目录 一路nex ...

  10. 1.8V转5V电平转换芯片,1.8V转5V的电源芯片

    1.8V是一个比较低的电压,在电压供电电压中,1.8V电压的过于小了,在一些电子模块或者MCU中,无法达到供电电压,和稳压作用,PW5100就是可以在1.8V转5V的电平转换电路和芯片,最大可提供50 ...