Cod sursa(job #3181307)

Utilizator razviOKPopan Razvan Calin razviOK Data 6 decembrie 2023 20:26:59
Problema Range minimum query Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <stdio.h>
#include <stdlib.h>

int Minimum(int a,int b){
    return (a<b) ? a:b;
}
void DynamicProgrammingSolution(int *arr,int N,int M) {

    int **Dp = (int **) malloc(sizeof(int *) * N);
    for (int i = 0; i < N; i++) {
        Dp[i] = (int *) malloc(sizeof(int) * (N - i));
    }

    for (int i = 0; i < N; i++)
        for (int j = 0; j < N - i; j++) {
            if (j == 0) Dp[i][j] = arr[i];
            else Dp[i][j] = Minimum(Dp[i][j - 1], arr[i+j]);
        }
//    for (int i = 0; i < N; i++){
//        for (int j = 0; j < N - i; j++)
//            printf("%d ",Dp[i][j]);
//        printf("\n");
//}


    int a,b;
    for(int i=0;i<M;i++){
        scanf("%d",&a);
        scanf("%d",&b);
        printf("%d\n",Dp[a-1][b-a]);
    }

    for(int i=0;i<N;i++) {
        free(Dp[i]);
    }

    free(Dp);



}
int main() {

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

    int N,M;
    scanf("%d",&N);
    scanf("%d",&M);
    int *arr=(int *) malloc(sizeof(int)*N);
    for(int i=0;i<N;i++)
        scanf("%d",&arr[i]);

    DynamicProgrammingSolution(arr,N,M);

    free(arr);
    return 0;
}