Cod sursa(job #2617081)

Utilizator paul3ioanCirstean Paul Ioan paul3ioan Data 20 mai 2020 18:17:35
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cmath>
#include <fstream>
#include <vector>
using namespace  std;
ifstream  cin("rmq.in");
ofstream cout("rmq.out");
const int N = 100002, Inf = 1e9;
int n,m, x, y, ls , ld;
int v[N],M[N];
int main() {
    cin >> n >> m;
    for(int i = 1 ;i <= n ;i ++)
    {
        cin >> v[i];
    }
    int rad = sqrt(n);
    for(int i = 1; i * rad <=n; i ++)
    {
        M[i] = Inf;
        for(int j= rad*(i - 1) + 1; j <=rad * i; j ++)
        {
            M[i] = min(M[i], v[j]);
        }
    }
//    for(int i = 1 ;i <=n; i ++)
//        cout << M[i]<<" ";
//    cout << '\n';
    for(int i = 1 ;i <=m ;i ++)
    {
        int ans =1e9,j;
        cin >> x >> y;
        for (j=1;rad*j<x;j++);
        j++;
        ls=rad*(j-1);
        for (;rad*j<=y;j++)
            ans=min(ans,M[j]);
        ld=rad*(j-1);

        for (j=x;j<=ls;j++)
            ans=min(ans,v[j]);
        for (j=ld;j<=y;j++)
            ans=min(ans,v[j]);
        cout << ans <<'\n';
    }
    return 0;
}