Pagini recente » Cod sursa (job #2735461) | Cod sursa (job #54060) | Cod sursa (job #1683327) | Cod sursa (job #1852490) | Cod sursa (job #1709528)
#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";
}
}