Pagini recente » Cod sursa (job #1768173) | Cod sursa (job #1573765) | Cod sursa (job #484496) | Cod sursa (job #1962360) | Cod sursa (job #374578)
Cod sursa(job #374578)
#include <fstream>
#define MaxN 200000
#define MaxL 18
using namespace std;
fstream fin ("rmq.in", ios::in);
fstream fout("rmq.out", ios::out);
int sir[MaxN];
int n, m, V[MaxN][MaxL], ex1, ex2, lg[MaxN];
void rmq(){
for (int i = 0; i <= n; i++)
V[i][0] = sir[i];
for (int j = 1; 1 << j <= n; j++)
for (int i = 0; i < n; i++)
if (V[i][j - 1] < V[i + (1 << (j - 1))][j - 1])
V[i][j] = V[i][j - 1];
else
V[i][j] = V[i + (1 << (j - 1))][j-1];
};
int main(){
fin>>n>>m;
for (int i = 1; i <= n; ++i){
fin>>sir[i];
};
rmq();
lg[1] = 0;
for (int i = 2; i <= n; i++)
lg[i] = lg[i/2] + 1;
for (int i = 1; i <= m; ++i){
fin>> ex1 >> ex2;
int dif,l;
dif = ex2 - ex1 + 1;
l = lg[dif];
fout << min(V[ex1][l], V[ex1 + dif - (1 << l)][l])<< '\n';
};
fin.close();
fout.close();
};