Cod sursa(job #2518937)

Utilizator OvidRata Ovidiu Ovid Data 6 ianuarie 2020 19:22:01
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
	
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in"); ofstream fout("rmq.out");
 
int N,M, A[100010],K[350];
 
 
int main() {
    	ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
    srand(chrono::steady_clock::now().time_since_epoch().count());
    
fin>>N>>M;
int sq=floor(sqrt(N));
 
for(int i=0; i<(N/sq); i++){
    K[i]=200000;
    for(int j=i*sq; (j-i*sq)<sq; j++){
        fin>>A[j];
        K[i]=min(K[i], A[j]);
    }
}
for(int i=(N/sq)*sq; i<N; i++){
    fin>>A[i];
}
 
 
 
 
 
 
 
 
int a, b, c, d, f;
for(;M;M--){
    fin>>a>>b;
    f=1000000000;
    c=a/sq+1; d=b/sq;
    if(d<=c){
        for(int i=a-1; i<b; i++){
            f=min(f, A[i]);
        }
    }
    else{
        for(int i=c; i<d; i++){
            f=min(f, K[i]);
        }
        
        c*=sq; d*=sq;
        for(int i=a-1; i<c; i++){
            f=min(f, A[i]);
        }
        
        for(int i=d-1; i<b; i++){
            f=min(f, A[i]);
        }
        
    }
    fout<<f<<"\n";
}
 
 
    return 0;
}