Cod sursa(job #1709726)

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

struct Interval
{
	int x, y, rasp, i;
};

struct El
{
	int a, i;
};



El vec[100001];
int n, i, a, y, q, maxim;
Interval x[1000001];
bool cmp(El a, El b)
{
	if(a.a==b.a)
		return a.i<b.i;
	return a.a<b.a;
}

bool cmp2(El a, El b)
{
	if(a.a==b.a)
		return a.i<b.i;
	return a.a<b.a;
}

bool c1(Interval A, Interval B)
{
	return A.x<B.x;
}
bool c2(Interval A, Interval B)
{
	return A.i<B.i;
}
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;
	}
	for(i=1; i<=q; i++)
	{
		f>>x[i].x>>x[i].y;
		x[i].i=i;
		x[i].rasp=-1;
	}
	int nr=0;
	sort(x+1, x+q+1, c1);
	sort(vec+1, vec+n+1, cmp);
	for(i=1; i<=n; i++)
	{
		if(vec[i].a==vec[i+1].a)
		{
			int st=1, dr=q;
			int xx=vec[i].i;
			int yx=vec[i+1].i;
			for(int j=1; j<=q; j++)
			{
				if(x[j].x<=xx && x[j].y>=yx)
				{
					if(yx-xx>x[j].rasp)
						x[j].rasp=yx-xx;
				}
				if(x[j].x>=yx)
					break;
			}
		}
	}
	sort(x+1, x+q+1, c2);
	for(i=1; i<=q; i++)
	{
		g<<x[i].rasp<<"\n";
	}
	
	//sort(interv+1, interv+nr+1, comp);
	//sort(xuri+1, xuri+nr+1, cmp);
	//sort(yuri+1, yuri+nr+1, cmp2);
	//f>>q;
	/*for(i=1; i<=q; i++)
	{
		f>>x>>y;
		Interval B;
		B.x=x;
		B.y=y;
		int st=1;
		int dr=nr;
		maxim=-1;
		//g<<maxim<<"\n";
		while(st<=dr)
		{
			int mid=(st+dr)/2;
			if(xuri[mid].a>=x)
			{
				int sx=1, dx=nr;
				while(sx<=dx)
				{
					int md=(sx+dx)/2;
					if(yuri[md].a<=y)
					{
						if(xuri[mid].i==yuri[md].i)
						{
							if(yuri[md].a-xuri[mid].a>maxim)
							{
								maxim=yuri[md].a-xuri[mid].a;
							}
						}
						sx=md+1;
					}
					else if(yuri[md].a>y)
						sx=md+1;
					else if(yuri[md].a<x)
						dx=md-1;
				}
				st=mid+1;
			}
			else if(xuri[mid].a<x)
				st=mid+1;
			else if(xuri[mid].a>y)
				dr=mid-1;
		}
		g<<maxim<<"\n";*/
	
}