Cod sursa(job #2164918)

Utilizator catalina200029Olteanu Catalina catalina200029 Data 13 martie 2018 10:26:51
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
///cu radical

#include <bits/stdc++.h>

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int n,mm,a[100005],rad,b[100005];

int interog(int x,int y) {
    int i,j,k=a[x];
    int q=(x-1)/rad+1;
    int w=(y-1)/rad+1;
    for (i=x;i<=rad*q;i++)
        k=min(a[i],k);
    for (i=q+1;i<=w-1;i++)
        k=min(k,b[i]);
    for (i=rad*(w-1)+1;i<=y;i++)
        k=min(a[i],k);
    return k;
}

int main() {
    int i,j,x,y;
    f>>n>>mm;
    rad=sqrt(n);
    for (i=1;i<=n;i++) {
        f>>a[i];
        b[(i-1)/rad+1]=(b[(i-1)/rad+1]==0)?a[i]:min(a[i],b[(i-1)/rad+1]);
    }
    for (i=1;i<=mm;i++) {
        f>>x>>y;
        g<<interog(x,y)<<'\n';
    }
    return 0;
}