Pagini recente » Monitorul de evaluare | Cod sursa (job #232854) | Atasamentele paginii Clasament winners26 | Istoria paginii utilizator/madalina.tomus | Cod sursa (job #3001490)
#include <iostream>
#include <fstream>
#define INF 1000000000
using namespace std;
ifstream fi ("rmq.in");
ofstream out ("rmq.out");
int T[100001][20];
int k;
int n;
int m;
int query(int st, int dr)
{
int rez;
rez=INF;
for (int col=k;col>=0;col--)
if (st+(1<<col)-1<=dr)
{
rez=min(rez,T[st][col]);
st=st+(1<<col);
}
return rez;
}
int main()
{
fi >> n;
fi>>m;
for(int i = 1; i <= n; i ++)
fi >> T[i][0];
/// etapa I, se obtine T
int p;
k=0;
p=1;
while (p*2<=n)
{
k++;
p=p*2;
}
for (int col=1;col<=k;col++)
for (int i=1;i<=n-(1<<col)+1;i++)
T[i][col]=min(T[i][col-1],T[i+(1<<(col-1))][col-1]);
/// etapa II, se citesc interogarile si se raspunde la ele
for (int i=1;i<=m;i++)
{
int st, dr;
fi >> st >> dr;
out<<query(st, dr)<<"\n";
}
return 0;
}