Cod sursa(job #2900722)

Utilizator adamemi02emanuel adam adamemi02 Data 11 mai 2022 23:51:44
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
//#include <bits/stdc++.h>
//using namespace std;
//int v[100001],mat[100001][34];
//int main() {
//    int n,m,a,b;
//    cin>>n>>m;
//    for(int i=1;i<=n;i++)
//    {cin>>v[i]; mat[i][0]=v[i];}
//
//    int j=1;
//    for(int x=2;x<=n;x=(x<<1),j++)
//        for(int i=1;i<=n-x+1;i++)
//            mat[i][j]=min(mat[i][j-1],mat[i+x>>1][j-1]);
//
//    for(int i=1;i<=m;i++)
//    {
//        cin>>a>>b;
//        cout<<min(mat[a][int(log2(b-a-1))],mat[b+1-(int)pow(2,int(log2(b-a-1)))][int(log2(b-a-1))]);
//
//
//
//    }
//
//
//
//
//}

#include <fstream>

using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");

const int NMAX = 100000;
int N, Q;
int rmq[20][NMAX + 5], lg[NMAX + 5];

int main() {
    cin >> N >> Q;
    for (int i = 1;i <= N;++i) {
        cin >> rmq[0][i];
    }
    lg[1] = 0;
    for (int i = 2;i <= N;++i) {
        lg[i] = lg[i / 2] + 1;
    }
    for (int p = 1;(1 << p) <= N;++p) {
        for (int i = 1;i + (1 << p) - 1 <= N;++i) {
            rmq[p][i] = min(rmq[p - 1][i], rmq[p - 1][i + (1 << (p - 1))]);

        }

    }
    for (int test = 1;test <= Q;++test) {
        int a, b, p;
        cin >> a >> b;
        p = lg[b - a + 1];
        cout << min(rmq[p][a], rmq[p][b - (1 << p) + 1]) << "\n";
    }
    return 0;
}