[https://atcoder.jp/contests/abc234/tasks/abc234_d Prefix K-th Max] 最小堆实现
Problem Statement
Given are a permutation P=(P_1,P_2,\ldots,P_N)P=(P1,P2,…,PN) of (1,2,\ldots,N)(1,2,…,N) and a positive integer KK.
For each i=K,K+1,\ldots,Ni=K,K+1,…,N, find the following.
- The KK-th greatest value among the first ii terms of PP.
Constraints
- 1 \leq K \leq N \leq 5 \times 10^51≤K≤N≤5×105
- (P_1,P_2,\ldots,P_N)(P1,P2,…,PN) is a permutation of (1,2,\ldots,N)(1,2,…,N).
- All values in input are integers
解法:
这就是1个TOPK问题。
java的最小堆、最大堆可以使用PriorityQueue<Integer>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.TreeSet; public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int N,K;
String[] words = reader.readLine().split("\\s+");
N = Integer.parseInt(words[0]);
K = Integer.parseInt(words[1]); int[] P = new int[N];
words = reader.readLine().split("\\s+");
for(int i=0;i<N;i++){
P[i] = Integer.valueOf(words[i]);
}
PriorityQueue<Integer> pq = new PriorityQueue<>(K);
for(int i =0;i<K;i++){
pq.add(P[i]);
}
StringBuilder sb = new StringBuilder();
sb.append(pq.peek()+"\n");
for(int i=K;i<N;i++){
int val = P[i];
if( val > pq.peek()){
pq.poll();
pq.add(val);
}
sb.append(pq.peek()+"\n");
// System.out.println(pq.peek());
}
System.out.println(sb);
reader.close();
} }
[https://atcoder.jp/contests/abc234/tasks/abc234_d Prefix K-th Max] 最小堆实现的更多相关文章
- Atcoder Regular 098 区间Pre=Xor Q询问区间连续K去最小值最小极差
C 用scanf("%s")就会WA..不知道为什么 /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset ...
- AtCoder Beginner Contest 134-E - Sequence Decomposing
(https://atcoder.jp/contests/abc134/tasks/abc134_e) 题意:找出最小个数的最长上升子序列 思路:找出最长上升子序列的最小个数,只需要找出每个最小上升子 ...
- ARC085E MUL
https://atcoder.jp/contests/arc085/tasks/arc085_c 题目大意 略 解法 最小割即可. 直接建图有负边,但是因为我们知道最后在割上的边数一定为 \(N\) ...
- Atcoder E - Knapsack 2 (01背包进阶版 ex )
E - Knapsack 2 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement The ...
- Atcoder Beginner Contest 121 D - XOR World(区间异或和)
题目链接:https://atcoder.jp/contests/abc121/tasks/abc121_d 题目很裸(Atcoder好像都比较裸 就给一个区间求异或和 n到1e12 肯定不能O(n) ...
- AtCoder Beginner Contest 120 D - Decayed Bridges(并查集)
题目链接:https://atcoder.jp/contests/abc120/tasks/abc120_d 题意 先给m条边,然后按顺序慢慢删掉边,求每一次删掉之后有多少对(i,j)不连通(我应该解 ...
- Atcoder D - Knapsack 1 (背包)
D - Knapsack 1 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement The ...
- atcoder B - Frog 2 (DP)
B - Frog 2 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There a ...
- atcoder A - Frog 1(DP)
A - Frog 1 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There a ...
- AtCoder Grand Contest 031 B - Reversi
https://atcoder.jp/contests/agc031/tasks/agc031_b B - Reversi Time Limit: 2 sec / Memory Limit: 1024 ...
随机推荐
- NC14698 模拟战役
题目链接 题目 题目描述 齐齐和司机在玩单机游戏<红色警戒IV>,现在他们的游戏地图被划分成一个n*m的方格地图.齐齐的基地在最上方的4行格内,司机的基地在最下方的4行格内.他们只有一种攻 ...
- Linux学习资料锦集
Linux 学习资料链接: (1)Linux常见命令及其用法_STM32李逼的博客-CSDN博客 (2)Linux命令了解_STM32李逼的博客-CSDN博客 3)Linux使用编辑器_STM32李 ...
- 使用OpenWrt实现IPv6 DDNS
OpenWrt 增加 crontab 任务 在/root/crontab/ 目录下, 创建脚本 ddns.sh #!/bin/sh # 远程php脚本的URL地址 SERVICE_URL=http:/ ...
- 【Unity3D】Bloom特效
1 Bloom 特效原理 Bloom 特效是指:将画面中较亮的区域向外扩散,造成一种朦脓的效果.实现 Bloom 特效,一般要经过 3 个阶段处理:亮区域检测.高斯模糊.Bloom 合成. 本 ...
- 【framework】View添加过程
1 前言 WMS启动流程 中介绍了 WindowManagerService 的启动流程,本文将介绍 View 的添加流程,按照进程分为以下2步: 应用进程:介绍从 WindowManagerImpl ...
- 《系列二》-- 10、initialize-初始化bean
目录 initializeBean 方法源码如下 二.重要操作 2.1 应用 Aware 2.2 applyBeanPostProcessorsBeforeInitialization: 2.3 in ...
- Java的SPI机制实践
Java SPI机制概述 先给出结论:"Java的SPI是一种服务发现机制,用于约定接口和动态发现实现类,体现了分层解耦的思想". Java的SPI机制常用于框架扩展或组件替换,最 ...
- mysql中如何批量生成百万级数据
# 准备 #1. 准备表 create table s1( id int, name varchar(20), gender char(6), email varchar(50), first_nam ...
- 基于kubeadm部署k8s1.80.0
k8s搭建 硬件要求 测试环境 # master 2核 4G 20G # node 4核 8G 40G 生产环境 # master 8核 16G 100G # node 16核 64G 500G 方式 ...
- Excel 求和函数结果一直为零
参考资料:Excel表格求和结果总是0怎么办 用SUMIFS函数求和,结果都是零 错误原因: 1.单元列数据格式设置错误,参考资料一 2.数据中含有空格或者回车键或者隐藏字符,参考资料二 解决方法: ...