Cod sursa(job #2674958)

Utilizator Mihaela...Mihaela Zmeu Mihaela... Data 20 noiembrie 2020 21:31:49
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.73 kb
#include "bits/stdc++.h"

using namespace std;

int main()
{
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");

    int n, m;
    cin >> n >> m;
    vector<int> v(n);
    vector<int> ab;
    int mn = 1000001;
    for(int i = 0; i < n; i++) {
        cin >> v[i];
        if(i % 100 != 0 || i == 0) {
            if(mn > v[i]) {
                mn = v[i];
            }
        }
        else {
            ab.push_back(mn);
            mn = 1000001;
        }
        if (mn != 1000001 && i == (n - 1)) {
            ab.push_back(mn);
        }
    }

    for ( int i = 0 ; i < m; i++) {
        int s = 1000001;
        int a, b;
        cin >> a >> b;

        if((a - 1) / 100 == (b - 1) / 100) {
            for(int e = a - 1; e < b; e++) {
                if(s > v[e]) {
                    s = v[e];
                }
            }
        }
        else {
            int q = (a - 1) / 100;
            int q1 = (b - 1) / 100;
            if ((a - 1) % 100 != 0) {
                q++;
            }
            if ((b - 1) % 100 == 99) {
                q1++;
            }
            if(q != q1) {
                for(int e = q; e < q1; e++) {
                    if(s > ab[e]) {
                        s = ab[e];
                    }
                }
            }
            while ((a - 1) % 100 > 0) {
                if (s > v[a - 1]) {
                    s = v[a - 1];
                }
                a++;
            }
            while((b - 1) % 100 >= 0 && (b - 1) % 100 != 99) {
                if (s > v[b - 1]) {
                    s = v[ b - 1];
                }
                b--;
            }
        }
        cout << s << '\n';
    }
    return 0;
}