#include<bits/stdc++.h>
using namespace std;
string s;
char Ans[10000];
int PosDP[10005][1005];
int RQ(int i,int j)
{
return s[i] <= s[j] ? i : j;
}
//RQ处理小值的下标。
void ST(int N) {
int temp = (int)(log((double)N) / log(2.0));
for (int i = 0; i < N; i++) PosDP[0][i] = i;
for (int i = 1; i <= temp; ++i)
for (int j = 0; j + (1 << i)-2 <N; ++j)
PosDP[i][j] = RQ(PosDP[i - 1][j], PosDP[i - 1][j + (1 << (i - 1))]);
}
int query(int L, int R)
{
int k = (int)(log((double)(R - L + 1)) / log(2.0));
return RQ(PosDP[k][L], PosDP[k][R - (1 << k) + 1]);
}
int main()
{
int i, cnt, m;
while (cin >> s >> m)
{
int len = s.size();
int tmp = len - m;
ST(len);
i = cnt = 0;
while (tmp--)
{
i = query(i, len - tmp - 1);
Ans[cnt++] = s[i++];
}
for (i = 0; i < cnt; i++)
{
if (Ans[i] != '0')
break;
}
if (i == cnt)
{
puts("0");
continue;
}
while (i < cnt)
{
cout << Ans[i];
i++;
}
puts("");
}
return 0;
}
HDU3183-RMQ(ST表)
猜你喜欢
转载自blog.csdn.net/qq_31741481/article/details/84346757
今日推荐
周排行