P8082 [COCI2011-2012#4] KEKS
思路:
我们贪心地想,要想要删完后的这个数越大,那么越在前面的数就要越大,那我们就可以用一个单调栈,不断将栈顶的数弹出,一直到删数次数为
代码:
#include<bits/stdc++.h>
#define MAXN 500005
using namespace std;
char s[MAXN];
int st[MAXN],top;//栈
int main(){
int n,k;
scanf("%d%d%s",&n,&k,s+1);
for(int i=1;i<=n;i++){
int x=s[i]-'0';
while(k&&top&&st[top]<x)k--,st[top--]=0;//弹出操作
st[++top]=x;//加入操作
}
for(int i=1;i<=top-k;i++)//遍历栈 不遍历后面剩余的 k 个数
printf("%d",st[i]);//输出答案
return 0;
}
upd on 2024.8.13 修了