Pagini recente » Cod sursa (job #948912) | Monitorul de evaluare | Cod sursa (job #2169150) | Cod sursa (job #1964881) | Cod sursa (job #1044029)
#include <stdio.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <queue>
#include <cstdlib>
#include <iomanip>
#include <cmath>
using namespace std;
#define NMAX 100001
int maximPow[NMAX];
void calc ()
{
maximPow[1] = 0;
for (int i = 2; i < NMAX; i++)
maximPow[i] = maximPow[i/2] + 1;
}
inline int minim (int a, int b)
{
if ( a < b )
return a;
else
return b;
}
int main()
{
int n, m, rmq[18][NMAX];
FILE *f = fopen ("rmq.in", "r");
FILE *g = fopen ("rmq.out", "w");
fscanf (f, "%d %d", &n, &m);
for (int i = 1 ; i <= n; i++)
{
fscanf(f, "%d", &rmq[0][i]);
}
int limit = maximPow[n];
for (int i = 1; i <= limit; i++)
{
for (int j = 1; j <= n; j++)
{
rmq[i][j] = minim ( rmq[i-1][j], rmq[i-1][j + (1<<(i-1))] );
}
}
int x, y;
for (int i = 0; i < m; i++ )
{
fscanf(f, "%d %d", &x, &y);
int len = y - x + 1;
limit = maximPow[len];
fprintf(g, "%d\n", minim ( rmq[limit][x], rmq[limit][1 + y - (1<<limit)]) );
}
fclose(f);
fclose(g);
return 0;
}