Cod sursa(job #2428317)
Utilizator | Data | 4 iunie 2019 18:19:14 | |
---|---|---|---|
Problema | Range minimum query | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.56 kb |
#include <bits/stdc++.h>
#define maxim 100004
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,dp[maxim][19];
int main()
{
f>>n>>m;
int x,y;
for (int i=1;i<=n;i++)
{
f>>x;
dp[i][0]=x;
}
for (int i=n; i>= 1; i--)
for (int j=1; i+(1<<j)-1 <= n ; j++)
dp[i][j]=min(dp[i][j-1], dp [ i +( 1<<(j-1))][j-1]);
while (m--)
{
f>>x>>y;
int d=y-x+1;
int l=(int)log2(d);
g<<min(dp[x][l], dp[x+d-(1<<l)][l])<<'\n';
}
}