제출 #443182

#제출 시각아이디문제언어결과실행 시간메모리
443182mashrur_hossainGrudanje (COCI19_grudanje)C++17
70 / 70
265 ms24316 KiB
#include <bits/stdc++.h>

#define fast_cin         ios_base::sync_with_stdio(0); cin.tie(NULL); cerr.tie(NULL);
#define endl             "\n"
#define dbg(x)           cerr << #x << ": " << x << endl;
#define DBG              cerr << __LINE__ << ": I GOT STUCK\n";

using namespace std;    
typedef long long ll;
typedef long double db;

const ll mxn = 1e5 + 10;

string s;
ll n, q;
pair<ll, ll>Q[mxn];
ll p[mxn];

bool good(ll x){
    string cur = s;
    for(ll i = 1;i<=x;i++){
        // cover till the current state
        cur[p[i]] = '*';
    }
    ll pre[n+5][26]{};
    // to calculate how many letters are present
    // pre calculate for array
    for(ll i = 1;i<=n;i++){
        for(ll j = 0;j<26;j++)
            pre[i][j] = pre[i-1][j];
        if(cur[i] == '*')continue;// if covered;
        pre[i][cur[i] - 'a']++;// counting occurence
    }

    for(ll i = 1;i<=q;i++){
        // check the count of occurence of each letter in each segment
        for(ll j = 0;j<26;j++){
            ll l = Q[i].first;
            ll r = Q[i].second;
            ll count = pre[r][j] - pre[l-1][j];
            if(count > 1)return false;
        }
    }
    return true;
}

void solve(){
    cin >> s;
    n = (ll)s.size();
    s = "_" + s;
    cin >> q;
    for(ll i = 1;i<=q;i++){
        ll a, b;cin >> a >> b;
        Q[i] = {a, b};
    }
    for(ll i = 1;i<=n;i++)cin >> p[i];
    ll l = 0, r= n;
    ll ans = 0;
    while(l<=r){
        ll mid = l + (r - l)/2;
        if(good(mid)){
            ans = mid;
            r = mid - 1;
        }
        else l = mid + 1;
    }
    cout << ans << endl;
}

// aaaaa
// 2
// 1 2
// 4 5
// 2 4 1 5 3


// abbabaab
// 3
// 1 3
// 4 7
// 3 5
// 6 3 5 1 4 2 7 8

int main() {
    fast_cin;
    int test;test = 1;
    // int test;cin >>test; 
    while(test--){
        solve();
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...