Pagini recente » Cod sursa (job #2839305) | Cod sursa (job #179742) | Cod sursa (job #335142) | Cod sursa (job #1350726) | Cod sursa (job #3182225)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,v[100005],q,rmin[21][100005],rmax[21][100005],fr[100005],E[100005],verif[100005];
int main()
{
fin>>n>>q;
for(int i=1;i<=n;i++)
{
fin>>v[i];
rmin[0][i]=v[i];
rmax[0][i]=v[i];
///fr[v[i]]++;
}
E[1]=0;
for(int i=2;i<=n;i++)
E[i]=1+E[i/2];
for(int p=1;(1<<p)<=n;p++)
{
for(int i=1;i<=n;i++)
{
rmin[p][i]=rmin[p-1][i];
int j=i+(1<<(p-1));
if(j<=n && rmin[p][i]>rmin[p-1][j])
rmin[p][i]=rmin[p-1][j];
}
}
for(int p=1;(1<<p)<=n;p++)
{
for(int i=1;i<=n;i++)
{
rmax[p][i]=rmax[p-1][i];
int j=i+(1<<(p-1));
if(j<=n && rmax[p][i]<rmax[p-1][j])
rmax[p][i]=rmax[p-1][j];
}
}
int j=1;
for(int i=1;i<=n;i++)
{
fr[v[i]]++;
while(fr[v[i]]>1)
{
fr[v[j]]--;
j++;
}
verif[i]=j;
}
int x,y,e,len,mini,maxi;
for(int z=1;z<=q;z++)
{
fin>>x>>y;
e=E[y-x+1];
len=(1<<e);
fout<<min(rmin[e][x],rmin[e][y-len+1])<<'\n';
}
return 0;
}