Submission #1123568

#TimeUsernameProblemLanguageResultExecution timeMemory
1123568jjjwong Martian DNA (BOI18_dna)C++20
100 / 100
32 ms3012 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
	
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	int N, K, R;
	cin >> N >> K >> R;
	
	vector<int> A;
	int req[K], curr[K];
	int ans = 0;
	
	fill(req, req+K, 0);
	fill(curr, curr+K, 0);
	
	for (int i=0; i<N; ++i) {
		int n;
		cin >> n;
		A.emplace_back(n);
	}
	
	for (int i=0; i<R; ++i) {
		int n, amt;
		cin >> n >> amt;
		req[n] = amt;
	}
	
	int req_met = 0;
	
	if (R == 0) {
		cout << 1;
		return 0;
	}
	
	int l = 0, r = 0;
	
	while (l < N) {
		if (req_met < R && r<N) {
			curr[A[r]]++;
			if (req[A[r]] > 0 && curr[A[r]] == req[A[r]]) req_met++;
			r++; 
		}
		else {
			if (req_met >= R) {
				if (ans == 0) ans = r - l;
				else ans = min(ans, r-l);
			}
			curr[A[l]]--;
			if (req[A[l]] > 0 && curr[A[l]] < req[A[l]]) req_met--;
			l++;
		}
	}
	
	if (ans != 0) cout << ans;
	else cout << "impossible";
	
	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...