Cod sursa(job #2559044)
| Utilizator | Data | 26 februarie 2020 22:26:01 | |
|---|---|---|---|
| Problema | Range minimum query | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.56 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,q;
int rmq[17][100001];
int main()
{
in>>n>>q;
for(int i=1;i<=n;i++)
in>>rmq[0][i];
int rMax=log2(n);
for(int r=1,l=1;r<=rMax;r++,l*=2)
for(int i=1;i<=n-2*l+1;i++)
rmq[r][i]=min( rmq[r-1][i] , rmq[r-1][i+l] );
for(int a,b,k=1;k<=q;k++)
{
in>>a>>b;
int r=log2(b-a+1);
int l=1<<r;
out<<min( rmq[r][a] , rmq[r][b-l+1] )<<'\n';
}
return 0;
}
