Pagini recente » Cod sursa (job #1834179) | Cod sursa (job #1153107) | Cod sursa (job #559295) | Cod sursa (job #313386) | Cod sursa (job #3181579)
#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);
}
void SquareRootDecomposition(int *arr,int N,int M){
int square_root,size;
for(square_root=1;square_root*square_root<=N;square_root++);
square_root--;
//printf("%d",square_root);
size=square_root;
if(square_root*square_root!=N)
size++;
int *SqrArr = (int *) malloc(sizeof(int) * size);
int cnt=-1;
for(int i=0;i<N;i++){
if(i%square_root==0){
cnt++;
SqrArr[cnt]=arr[i];
}
else SqrArr[cnt]= Minimum(SqrArr[cnt],arr[i]);
}
int a,b,min=INT_MAX;
for(int q=0;q<M;q++){
min=INT_MAX;
scanf("%d",&a);
scanf("%d",&b);
a-=1;
b-=1;
for(int it=a;it<=b;it++){
if(it%square_root==0 && it+square_root-1<=b) {
min = Minimum(min, SqrArr[it/square_root]);
it+=square_root;
it--;
}
else min= Minimum(min,arr[it]);
}
printf("%d\n",min);
}
// for(int i=0;i<size;i++)
// printf("%d ",SqrArr[i]);
free(SqrArr);
}
void RangeMinimumQuery(int *arr,int N,int M){
}
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);
SquareRootDecomposition(arr,N,M);
free(arr);
return 0;
}