Submission #1366993

#TimeUsernameProblemLanguageResultExecution timeMemory
1366993gvancak Martian DNA (BOI18_dna)C++20
100 / 100
59 ms11004 KiB
#include <bits/stdc++.h>
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define ll long long
using namespace std;
const ll N=2e5+5,INF=1e12;
ll a[N],ans,c[N],b[N],n,k,m,x;
set <ll> s;
pair <ll,ll> p[N];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    
    cin >> n >> k >> m;
    for (int i=1; i<=n; i++){
    	cin >> a[i];
	}
	for (int i=1; i<=m; i++){
		cin >> p[i].f >> p[i].s;
		b[p[i].f]=p[i].s;
	}
	for (int i=1; i<=m; i++){
		s.insert(p[i].f);
		c[p[i].f]=0;
	//	cout<<p[i].f<<endl;
	}
	x=1; ans=INF;
	for (int i=1; i<=n; i++){
		c[a[i]]++;
	//	cout<<c[0]<<" "<<c[1]<<endl;
		if (c[a[i]]==b[a[i]]){
			s.erase(s.find(a[i]));
		}
	//	cout<<s.size()<<endl;
		if (s.size()==0){
			while (x<=i){
				if (c[a[x]]-1>=b[a[x]]) {
					c[a[x]]--; x++; }
				else break;
			}
		//	cout<<"I: "<<i<<" "<<x<<endl;
			ans=min(ans,i-x+1);
		//	cout<<ans<<endl;
		}
		
	}
	if (ans==INF) cout<<"impossible"<< endl; else
	cout << ans << endl;
	
	
    

}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...