Submission #1129673

#TimeUsernameProblemLanguageResultExecution timeMemory
1129673Muhammet Martian DNA (BOI18_dna)C++20
100 / 100
159 ms137376 KiB
#include "bits/stdc++.h"

using namespace std;

#define SZ(s) (int)s.size()

int n, k, r;

int main(){
	ios::sync_with_stdio(false); cin.tie(nullptr);

	cin >> n >> k >> r;
	vector <int> a(n+1), vis(k+1,0), vis1(k+1,0);
	for(int i = 1; i <= n; i++){
		cin >> a[i];
	}
	for(int i = 1; i <= r; i++){
		int b, q1;
		cin >> b >> q1;
		vis1[b] = 1;
		vis[b] = q1;
	}
	int r1 = r, ind = 0, ans = n+1;
	queue <int> q[k+1];
	set <int> s;
	for(int i = 1; i <= n; i++){
		if(!vis1[a[i]]) continue;
		if(!vis[a[i]]){
			s.erase(s.find(q[a[i]].front()));
			q[a[i]].pop();
			q[a[i]].push(i);
			s.insert(q[a[i]].front());
			if(r1 == 0) ans = min(ans, i-(*s.begin())+1);
			continue;
		}
		vis[a[i]]--;
		if(vis[a[i]] == 0) r1--;
		if(SZ(q[a[i]]) == 0) s.insert(i);
		q[a[i]].push(i);
		if(r1 == 0) ans = min(ans, i-(*s.begin())+1);
	}
	if(ans == n+1) cout << "impossible";
	else cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...