Cod sursa(job #2904462)
Utilizator | Data | 17 mai 2022 23:41:10 | |
---|---|---|---|
Problema | Range minimum query | Scor | 30 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.76 kb |
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int a[100001][20];
int main()
{
int n, m, i, j, k, x, y;
f>>n>>m;
for(i=1; i<=n; i++)
f>>a[i][0];
j = 1;
k = 1;
while(j<=n)
{
for(i=1; i+j-1<=n; i++)
a[i][k]=min(a[i][k-1],a[i+j][k-1]);
j=j<<1;
k++;
}
i = 1;
while(i<=m)
{
f>>x>>y;
if(x>y)
swap(x,y);
j = y - x + 1;
int p = 1;
k = 0;
while(p <= j)
{
p = p<<1;
k++;
}
p = p>>1;
k--;
g<<min(a[x][k],a[y-p+1][k])<<endl;
i++;
}
}