Cod sursa(job #2676499)

Utilizator andreiutu111Noroc Andrei Mihail andreiutu111 Data 24 noiembrie 2020 15:01:33
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

#define NMAX 100002
#define INF 0x3f3f3f3F

int main() {
    long long num[NMAX];
    long long sq[NMAX] = {0};
    long long N, M, i, j, r, x, y, ls, ld, rez;

    freopen("test.in", "r", stdin);
    freopen("test.out", "w", stdout);

    scanf("%lld %lld", &N, &M);

    for (i = 1 ; i <= N ; i++) {
        scanf("%lld", &num[i]);
    }

    r = 0;

    while (r * r <= N)
    {
        r++;
    }
    r--;
    
    for (i = 1 ; r * i <= N ; i++) {
            sq[i] = INF;
            for(j = r * (i - 1) + 1 ; j <= r * i ; j++) {
                sq[i] = min(sq[i], num[j]);
            }
    }

    
    for (i = 1 ; i <= M ; i++) {
        rez = INF;

        scanf("%lld %lld", &x, &y);
        
        j = 1;
        while (r * j < x)
        {
            j++;
        }

        ls = min(r * (j - 1), y);

        while (r * j <= y) {
            rez = min(rez, sq[j]);
            j++;
        }

        ld = max(r * (j - 1), x);


        for (j = x ; j <= ls ; j++) {
	        rez = min(rez, num[j]);
        }
	
		for (j = ld ; j <= y ; j++) {
			rez = min(rez, num[j]);
        }

        printf("%lld\n", rez);
    }

    return 0;
}