Cod sursa(job #1709528)

Utilizator ubb_912codersUBB Badila Bereczki Bodea ubb_912coders Data 28 mai 2016 12:43:55
Problema Pq Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.15 kb
#include <fstream>
#include <set>
#include <algorithm>
using namespace std;

struct Interval
{
	int x, y;
};

struct El
{
	int a, i;
};

class comp
{
public:
	bool operator()(Interval A, Interval B)
	{
		if(A.x==B.x)
			return A.y<B.y;
		return A.x<B.x;
	}
};

multiset<Interval, comp> st;
El vec[100001];
int n, i, a, x, y, q, maxim;
multiset<Interval, comp>::iterator it;
bool cmp(El a, El b)
{
	if(a.a==b.a)
		return a.i<b.i;
	return a.a<b.a;
}
int main()
{
	ifstream f("pq.in");
	ofstream g("pq.out");
	f>>n>>q;
	for(i=1; i<=n; i++)
	{
		f>>a;
		El A;
		A.a=a;
		A.i=i;
		vec[i]=A;
	}
	sort(vec+1, vec+n+1, cmp);
	for(i=1; i<=n; i++)
	{
		if(vec[i].a==vec[i+1].a)
		{
			Interval A;
			A.x=vec[i].i;
			A.y=vec[i+1].i;
			st.insert(A);
		}
	}
	//f>>q;
	for(i=1; i<=q; i++)
	{
		f>>x>>y;
		Interval B;
		B.x=x;
		B.y=y;
		it=st.find(B);
		maxim=0;
		it=st.begin();
			while(it!=st.end())
			{
				if((*it).y-(*it).x>maxim && (*it).y<=y && (*it).x>=x)
					maxim=(*it).y-(*it).x;
				if((*it).x>y)
					break;
				it++;
			}
			if(maxim!=0)
				g<<maxim<<"\n";
			else
				g<<-1<<"\n";
	}
}