KEKS
题目描述
Mirko和Slavko再一次厌倦了数学课,所以他们发明了一个新游戏。Mirko写下N个数字组成的一个数,Slavko的任务是算出除去K个数字后的最大值。
输入
第一行两个整数N和K。(1≤K≤N≤500000)
接下来的一行有一个长度为N的数。
输出
一行,即题目所求最大值。
样例输入
4 2
1924
样例输出
94
提示
Input
7 3
1231234
Output
3234
Input
10 4
4177252841
Output
775841
析:一共有50W位的数一定不能用整数读,要用字符串,所以保存时要用char类型保存(注意S为ansistring),但仔细分解样例,我们可以发现:这题的方法跟单调栈相似,一个一个进栈,只要当前不可能,就一直剔除直到可以保存,在把当前的覆盖掉,最终输出保存的数,最后答案可以发现,是单调的,所以代码显而易见。
STD:
var
n,m,i,j,top,k:longint;
s:ansistring;
stack:array[1..500000] of char;
begin
readln(n,k);
readln(s);
for i:=1 to n do
begin
while (top>0) and (k>0) and (s[i]>stack[top]) do
begin
dec(top);
dec(k);
end;//排除不可能
inc(top);
stack[top]:=s[i];//覆盖以前,保存当前最优值
end;
for i:=1 to top-k do//保存的数
write(stack[i])
end.