Cod sursa(job #2617074)

Utilizator paul3ioanCirstean Paul Ioan paul3ioan Data 20 mai 2020 18:04:40
Problema Range minimum query Scor 60
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]<<" ";
    for(int i = 1 ;i <=m ;i ++)
    {
        int ans =1e9,j;
        cin >> x >> y;
        for (j=1;rad*j<x;j++);
        j++;
        ls=min(rad*(j-1),y);
        for (;rad*j<=y;j++)
            ans=min(ans,M[j]);
        ld=max(rad*(j-1),x);

        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;
}