Submission #1294130

#TimeUsernameProblemLanguageResultExecution timeMemory
1294130Jawad_Akbar_JJ Martian DNA (BOI18_dna)C++20
100 / 100
77 ms17856 KiB
#include <iostream>
#include <set>
#include <vector>

using namespace std;
const int N = 1<<18;
vector<int> occ[N];
int id[N], Cur[N], a[N], tm[N];

int main(){
  ios_base::sync_with_stdio(false); cin.tie(NULL);
	int n, m, k, Ans = N;
	cin>>n>>m>>k;

	for (int i=1;i<=n;i++){
		cin>>a[i];
		id[i] = occ[a[i]].size();
		occ[a[i]].push_back(i);
	}

	multiset<int> ms;
	for (int i=1;i<=k;i++){
		int c;
		cin>>c;
		cin>>tm[c];
		Cur[c] = n + 1;
		ms.insert(n + 1);
	}

	for (int i=n;i>=1;i--){
		if (tm[a[i]] == 0)
			continue;
		if (id[i] + tm[a[i]] <= occ[a[i]].size()){
			ms.erase(ms.find(Cur[a[i]]));
			Cur[a[i]] = occ[a[i]][id[i] + tm[a[i]] - 1];
			ms.insert(Cur[a[i]]);
		}

		if (*rbegin(ms) <= n)
			Ans = min(Ans, *rbegin(ms) - i + 1);
	}
	if (Ans == N)
		cout<<"impossible\n";
	else
		cout<<Ans<<'\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...