Submission #938135

#TimeUsernameProblemLanguageResultExecution timeMemory
938135freedommo33 Martian DNA (BOI18_dna)C++17
100 / 100
26 ms4160 KiB
#include <bits/stdc++.h>

using namespace std;
constexpr int M = 200005;
int tab[M];
int wymagane[M];
bool czyPotrzeba[M];

int main(){
	cin.tie(0)->sync_with_stdio(0);
	int n, k, ileL;
	cin>>n>>k>>ileL;
	for(int i=1; i<=n; i++) cin>>tab[i];
	for(int i=1; i<=ileL; i++){
		int a, b;
		cin>>a>>b;
		wymagane[a] = b;
		czyPotrzeba[a] = 1;
	}
	int l = 1;
	int ileJuz = 0;
	int wynik = M + 2;
	int dlugosc = 0;
	for(int r=1; r<=n; r++){
		while(l<=n && ileJuz < ileL){
			wymagane[ tab[l] ]--;
			if(wymagane[tab[l]] == 0 && czyPotrzeba[tab[l]]==1) ileJuz++;
			dlugosc++;
			if(ileJuz == ileL) wynik = min(wynik, dlugosc);
			l++;
		}
		wymagane[ tab[r] ]++;
		if(wymagane[tab[r]]==1 && czyPotrzeba[tab[r]]==1) ileJuz--;
		dlugosc--;
		if(ileJuz == ileL) wynik = min(wynik, dlugosc);
	}
	if(wynik==M+2) cout<<"impossible"<<endl;
	else cout<<wynik<<endl;
	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...