Submission #860940

#TimeUsernameProblemLanguageResultExecution timeMemory
860940vjudge1 Martian DNA (BOI18_dna)C++17
68 / 100
371 ms1048576 KiB
#include <iostream> #include <vector> #include <map> #include <climits> #define int long long using namespace std; signed main() { int n, k, r, res, le, ri, mid, ans; bool ok; map<int,int> c; cin >> n >> k >> r; vector<int> a(n); vector<pair<int,int>> b(r); vector<vector<int>> prefix(n, vector<int>(r)); for(int i = 0; i < n; i++) cin >> a[i]; for(int i = 0; i < r; i++) { cin >> b[i].first >> b[i].second; c[b[i].first] = i+1; } if(c[a[0]]) prefix[0][c[a[0]]-1]++; for(int i = 1; i < n; i++) { for(int j = 0; j < r; j++) prefix[i][j] = prefix[i-1][j]; if(c[a[i]]) prefix[i][c[a[i]]-1]++; } for(int z = 0; z < r; z++) { if(prefix[n-1][z] < b[z].second) { cout << "impossible\n"; return 0; } } res = n; for(int i = 0; i < n; i++) { le = i, ri = n-1, ans = LLONG_MAX; while(le<=ri) { mid = (le+ri)/2; ok = true; for(int j = 0; j < r; j++) { if(prefix[mid][j]-(i == 0 ? 0 : prefix[i-1][j]) < b[j].second) { ok = false; break; } } if(ok) { ri = mid-1; ans = mid; } else le = mid+1; } res = min(res, ans-i+1); } cout << res << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...