Submission #1305795

#TimeUsernameProblemLanguageResultExecution timeMemory
1305795neonglitch Martian DNA (BOI18_dna)C++20
100 / 100
1927 ms11440 KiB
#include <iostream>
#include <set>
using namespace std;
const int N=2e5+10;
int wt[N],cnt[N],val[N];
multiset<int> dif;
// cnt[r]-wt[r] in a 
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,k,r;
	cin>>n>>k>>r;
	for(int i=0;i<n;i++)
	{
		cin>>val[i];
	}
	for(int i=0;i<r;i++)
	{
		int b,q;
		cin>>b>>q;
		wt[b]=q;
	}
	int s=0,e=n+1;
	while(s+1<e)
	{
		int mid=(s+e)/2;
		for(int i=0;i<k;i++)cnt[i]=0;
		dif.clear();
		for(int i=0;i<mid;i++)
		{
			cnt[val[i]]++;
		}
		for(int i=0;i<k;i++)dif.insert(cnt[i]-wt[i]);
		bool pos=0;
		pos|=((*begin(dif))>=0);
		for(int i=mid;i<n;i++)
		{
			int x=val[i];
			dif.erase(dif.find(cnt[x]-wt[x]));
			cnt[x]++;
			dif.insert(cnt[x]-wt[x]);
			x=val[i-mid];
			dif.erase(dif.find(cnt[x]-wt[x]));
			cnt[x]--;
			dif.insert(cnt[x]-wt[x]);
			pos|=((*begin(dif))>=0);
		}
		if(pos)
		{
			e=mid;
		}
		else{
			s=mid;
		}
	}
	if(e==n+1)
	{
		cout<<"impossible"<<endl;
	}
	else
		cout<<e<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...