Cod sursa(job #1796341)

Utilizator NinjaCubeMihai Radovici NinjaCube Data 3 noiembrie 2016 13:04:01
Problema Range minimum query Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

main() {
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");
    int n, m, sqn, INFINIT = 100001;
    cin>>n>>m;
    sqn = 100;
    vector<int> a(n), v(n/sqn+1);
    fill(v.begin(), v.end(), INFINIT);
    for (int i = 0; i < n; i++) {
        cin>>a[i];
        v[i/sqn] = min(v[i/sqn], a[i]);
    }
    for (int j = 0; j < m; j++) {
        int x, y, z;
        cin>>x>>y;
        x--;
        z = a[x];
        int i = x;
        while (i<y && i%sqn>0) {
            z = min(z, a[i]);
            i++;
        }
        while(i+sqn<y) {
            z = min(z, v[i/sqn]);
            i += sqn;
        }
        while (i<y) {
            z = min(z, a[i]);
            i++;
        }
        cout<<z<<"\n";
    }
}