###题目大意:
长度为n的字符串,按照小写字母顺序表删除k个字母(删完a才能接着删b…)
###解题思路:
模拟即可,我用STL 队列写了一发,熟悉一些队列操作。
#include<iostream>
#include<cstdio>
#include<fstream>
#include<set>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<iomanip>
#include<cstdlib>
#include<list>
#include<queue>
#include<stack>
#include<algorithm>
#define inf 0x3f3f3f3f
#define MOD 1000000007
#define mem0(a) memset(a,0,sizeof(a))
#define mem1(a) memset(a,-1,sizeof(a))
#define meminf(a) memset(a,inf,sizeof(a))
typedef long long ll;
using namespace std;
char a[400010];
struct node
{
queue<int> location;
}letter[26];
int main()
{
/* std::ios::sync_with_stdio(false);
cin.tie(0);
freopen("test.txt","r",stdin);
freopen("output.txt","w",stdout);*/
int n,k;
cin>>n>>k;
cin>>a;
for(int t=0;t<n;t++)
{
int j=a[t]-'a';
letter[j].location.push(t);//保存对应字母的下标
}
int i=0;
while(k>0)
{
int sum;
if(k>=letter[i].location.size()){k-=letter[i].location.size();sum=letter[i].location.size();}//判断本次k的变化
else
{
sum=k;//保存本次k的变化
k=0;
}
int cur=0;
while(cur<sum)
{
a[letter[i].location.front()]='0';//标记这个元素已经被删除
letter[i].location.pop();
cur++;
}
i++;
}
for(int j=0;j<n;j++)
{
if(a[j]!='0')cout<<a[j];
}
cout<<endl;
return 0;
}