Pagini recente » Cod sursa (job #858470) | Cod sursa (job #2278529) | Cod sursa (job #1147869) | Cod sursa (job #1186738) | Cod sursa (job #1954247)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int rmq[20][100010];
vector <int> log(100001);
int n,k;
void citire()
{
f>>n>>k;
int x;
for(int i=1;i<=n;i++)
f>>rmq[0][i];
}
void initializere()
{
log[1]=0;
for(int i=2;i<=n;i++)
log[i]=log[i/2]+1;
int l;
for (int i=1; (1 << i) <=n;i++)
for (int j=1;j <= n - (1 << i)+1;j++)
{
l=1<<(i-1);
rmq[i][j]= min( rmq[i-1][j] , rmq[i-1][j+l] );
}
}
void teste()
{
int x,y,diff,l,sh;
for(int i=0;i<k;i++)
{
f>>x>>y;
diff=y-x+1;
l=log[diff];
sh=diff-(1<<l);
g<<min(rmq[l][x],rmq[l][x+sh])<<"\n";
}
}
int main()
{
citire();
initializere();
teste();
f.close();
g.close();
}