#include
en utilisant l’espace de noms std ;
string lexicographicallyLargest(string S, int K)
{
int n = S.longueur();
priorité_queue
pour (int i = 2; i < n; i = i + 2) {
pqEven.push(make_pair(S[i], je));
}
pour (int i = 3; i < n; i = i + 2) {
pqOdd.push(make_pair(S[i], je));
}
pour (int i = 0; i < n; i++) {
si (i % 2 == 0) {
tandis que (!pqEven.empty()
et pqEven.top().second <= i)
pqEven.pop();
si (!pqEven.empty()
et pqEven.top().first > S[i]) {
échanger (S[i], S[pqEven.top().second]);
int idx = pqEven.top().second;
pqEven.pop();
pqEven.push({ S[idx], idx });
K–;
}
}
autre {
tandis que (!pqOdd.empty()
et pqOdd.top().second <= i)
pqImpair.pop();
if (!pqOdd.empty()
et pqOdd.top().first > S[i]) {
échanger (S[i], S[pqOdd.top().second]);
int idx = pqOdd.top().second;
pqImpair.pop();
pqImpair.push({ S[idx], idx });
K–;
}
}
si (K == 0)
Pause;
}
Retour;
}
int main()
{
chaîne S = « geektechnique » ;
entier K = 2;
cout << lexicographiquement le plus grand (S, K);
renvoie 0 ;
}