Pagini recente » Cod sursa (job #510084) | Cod sursa (job #273417) | Cod sursa (job #51129) | Cod sursa (job #2867025) | Cod sursa (job #1709726)
#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";*/
}