제출 #1188597

#제출 시각아이디문제언어결과실행 시간메모리
1188597qrn Martian DNA (BOI18_dna)C++20
100 / 100
96 ms26696 KiB
#include <bits/stdc++.h> // #include <ext/pb_ds/assoc_container.hpp> using namespace std; // using namespace __gnu_pbds; #define pb push_back #define ins insert #define fi first #define se second // #define endl "\n" #define ALL(x) x.begin(), x.end() #define intt long long const intt mod = 1e9 + 7; const intt base = 9973; const intt inf = 1e18; const intt mxN = 5e5 + 5; const intt L = 21; void solve() { intt N, K, R, maks = 0, mecbur = -1; cin >> N >> K >> R; vector<intt> A(N), REQ(K); set<intt> st; for(auto &a : A) cin >> a; for(intt i = 0; i < R; i++) { intt num, cnt; cin >> num >> cnt; REQ[num] = cnt; st.insert(num); } vector<vector<intt>>pos(K, vector<intt>{}); for(intt i = 0; i < N; i++) { pos[A[i]].pb(i); } vector<vector<intt>>rb(K, vector<intt>{}); for(intt num : st) { rb[num].resize(pos[num].size()); for(intt i = 0; i < pos[num].size(); i++) { if(REQ[num] == 0) { rb[num][i] = 0; } else { if(i + REQ[num] - 1 < (intt)pos[num].size()) { rb[num][i] = pos[num][i + REQ[num] - 1]; } else { rb[num][i] = inf; } } } } // for(intt num : st) { // cout << num << ": "; // for(intt k : rb[num]) { // cout << k << " "; // } // cout << endl; // } intt ans = inf; for(intt num : st) { if(REQ[num] == 0) continue; maks = max(maks, rb[num][0]); } if(maks == inf) { cout << "impossible" << endl; return; } // cout << maks << endl; ans = min(ans, maks); vector<intt> cur(K, 0); for(intt i = 0; i < N; i++) { if(i) ans = min(ans, maks - i); // if(ans == 4) { // cout << i << ": " << ans << " " << maks << endl; // } if(st.find(A[i]) != st.end()) { cur[A[i]]++; intt newidx = cur[A[i]]; if(rb[A[i]][newidx] == inf || newidx == rb[A[i]].size()) { break; } maks = max(maks, rb[A[i]][newidx]); } } cout << ans+1 << endl; } signed main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); intt tst = 1; // cin >> tst; while(tst--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...