제출 #1188428

#제출 시각아이디문제언어결과실행 시간메모리
1188428qrn Martian DNA (BOI18_dna)C++20
0 / 100
129 ms16416 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; 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(i + REQ[num] - 1 < (intt)pos[num].size()) { rb[num][i] = pos[num][i + REQ[num] - 1] + 1; } else { rb[num][i] = inf; } } } intt ans = inf; for(intt num : st) { maks = max(maks, rb[num][0]); } if(maks == inf) { cout << "impossible" << endl; return; } vector<intt> cur(K, 0ll); for(intt i = 0; i < N; i++) { if(ans > N && maks == inf) { cout << "impossible" << endl; return; } ans = min(ans, maks - i); if(st.find(A[i]) != st.end()) { cur[A[i]]++; intt newidx = cur[A[i]]; maks = max(maks, rb[A[i]][newidx]); } } cout << ans << 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...