Pagini recente » Cod sursa (job #706657) | Cod sursa (job #1076306) | Cod sursa (job #1658554) | Cod sursa (job #3153450) | Cod sursa (job #1184990)
#include<fstream>
#define Next (++pos==Lim)?(fin.read(Buffer,Lim),pos = 0):0
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int Nmax=100005;
const int Lim=50000;
int n,q,a[Nmax],mat[Nmax][20],pos;
short logaritm[Nmax];
char Buffer[Lim];
inline void Read(int &x)
{
while(Buffer[pos]<'0' || '9'<Buffer[pos])
Next;
x = 0;
while('0'<=Buffer[pos] && Buffer[pos]<='9')
{
x = x*10 +Buffer[pos]-'0';
Next;
}
}
inline void Citire()
{
int i;
fin.read(Buffer,Lim);
Read(n);Read(q);
for (i=1;i<=n;i++)
Read(mat[i][0]);
}
inline void DP()
{
int i,j,st,aux,dr;
for (i=2;i<=n;i++)
logaritm[i]=logaritm[i>>1]+1;
for (j=1;(1<<j)<=n;j++)
for (i=1;i<=n-(1<<j)+1;i++)
mat[i][j]=min(mat[i][j-1],mat[i+(1<<(j-1))][j-1]);
for (i=1;i<=q;i++)
{
Read(st);Read(dr);
aux=dr-st+1;
fout<<min(mat[st][logaritm[aux]],mat[dr-(1<<(logaritm[aux]))+1][logaritm[aux]]);
fout<<"\n";
}
}
int main()
{
Citire();
DP();
return 0;
}