KEKS--------单调栈

KEKS

题目描述

MirkoSlavko再一次厌倦了数学课,所以他们发明了一个新游戏。Mirko写下N个数字组成的一个数,Slavko的任务是算出除去K个数字后的最大值。

输入

第一行两个整数NK。(1KN500000

接下来的一行有一个长度为N的数。

输出

一行,即题目所求最大值。

样例输入

4 2

1924

样例输出

94

提示

Input

7 3

1231234

Output

3234

Input

10 4

4177252841

Output

775841

 

析:一共有50W位的数一定不能用整数读,要用字符串,所以保存时要用char类型保存(注意Sansistring),但仔细分解样例,我们可以发现:这题的方法跟单调栈相似,一个一个进栈,只要当前不可能,就一直剔除直到可以保存,在把当前的覆盖掉,最终输出保存的数,最后答案可以发现,是单调的,所以代码显而易见。

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.

你可能感兴趣的:(算法)