Pagini recente » Cod sursa (job #1139629) | Cod sursa (job #368412) | Cod sursa (job #831377) | Cod sursa (job #1215887) | Cod sursa (job #1184984)
#include<fstream>
#define Next (++pos==100)?(fin.read(Buffer,100),pos = 0):0
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,q,a[100005],mat[100005][20],pos;
short logaritm[100005];
char Buffer[50000];
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,50000);
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[st+aux-(1<<(logaritm[aux]))][logaritm[aux]]);
fout<<"\n";
}
}
int main()
{
Citire();
DP();
return 0;
}