Pagini recente » Borderou de evaluare (job #963721) | Cod sursa (job #2504336) | Cod sursa (job #2463588) | Cod sursa (job #163234) | Cod sursa (job #2761762)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define MAX 10000
int lookup[MAX][MAX];
int n,m,x,y,a;
int v[100001];
void preprocess(int arr[], int n)
{
for (int i = 1; i <= n; i++)
lookup[i][i] = i;
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++)
if (arr[lookup[i][j - 1]] < arr[j])
lookup[i][j] = lookup[i][j - 1];
else
lookup[i][j] = j;
}
}
void RMQ(int arr[], int n, int x, int y)
{
preprocess(arr, n);
int L = x;
int R = y;
fout << arr[lookup[L][R]] << endl;
}
int main()
{
fin >> n >> m;
for(int i=1; i <= n; i++)
fin >> v[i];
for(int i=1; i<=m;i++)
{
fin >> x >> y;
RMQ(v,n,x,y);
}
return 0;
}