Pagini recente » Cod sursa (job #694058) | Cod sursa (job #1823644) | Cod sursa (job #120199) | Cod sursa (job #238623) | Cod sursa (job #1319648)
#include <cstdio>
#include <cmath>
#define DMAX 100005
using namespace std;
FILE*fin=fopen("rmq.in","r");
FILE*fout=fopen("rmq.out","w");
void citire();
void fa_p2();
void fa_RMQ();
void rezolvare();
int n,m,logn;
int rmq[DMAX][15];
int v[DMAX];
int min(int a,int b);
int p2[20];
int main()
{
citire();
fa_p2();
fa_RMQ();
rezolvare();
return 0;
}
void citire()
{
int i;
fscanf(fin,"%d %d",&n,&m);
for (i=1;i<=n;i++) fscanf(fin,"%d",&v[i]);
}
void fa_p2()
{
int i;
p2[0]=1;
for (i=1;i<=n && p2[i-1]<=n;i++)
{p2[i]=1<<i;
logn=i;
}
}
void fa_RMQ()
{
int i,j;
for (i=1;i<=n;i++) rmq[i][0]=v[i];
for (j=1;j<=logn;j++)
for (i=1;i<=n;i++)
rmq[i][j]=min( rmq[i][j-1], rmq[i-p2[j-1]][j-1] );
}
void rezolvare()
{
int i,st,dr;
for (i=1;i<=m;i++)
{
fscanf(fin,"%d %d",&st,&dr);
}
}
int min(int a,int b)
{
if (a<b) return a;
return b;
}