#include <bits/stdc++.h>
using namespace std;
int main()
{
int N, Q;
string S;
cin >> S;
N = S.size();
cin >> Q;
vector<pair<int, int>> Tab;
for (int i = 0; i < Q; i++)
{
int a, b;
cin >> a >> b;
Tab.push_back({a, b});
}
sort(Tab.begin(), Tab.end());
vector<int> perm(N);
for (int i = 0; i < N; i++)
{
int x;
cin >> x;
perm[x - 1] = i + 1;
}
vector<pair<int, int>> big(26), sec(26);
int buff = 0, ans = 0;
for (int i = 0; i < Q; i++)
{
while (buff < Tab[i].second)
{
int x = S[buff] - 'a';
if (sec[x].second < Tab[i].first)
sec[x] = {0, 0};
if (big[x].second < Tab[i].first)
big[x] = sec[x], sec[x] = {0, 0};
if (perm[buff] > sec[x].first)
sec[x] = {perm[buff], buff + 1};
if (sec[x].first > big[x].first)
swap(sec[x], big[x]);
ans = max(ans, sec[x].first);
buff++;
}
}
cout << ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |