Pagini recente » Cod sursa (job #2761533) | Cod sursa (job #2444523) | Cod sursa (job #3170099) | Cod sursa (job #1128457) | Cod sursa (job #2339014)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, val_log, table[100005][20], st, dr;
void creeare_table(int table[][20])
{
for (int col=1, putere=2; putere<=n; putere<<=1,col++)
{
for (int lin=1; lin+putere-1<=n; lin++)
{
table[lin][col]=min(table[lin][col-1],table[lin+(putere>>1)][col-1]);
}
}
}
int rezolvare_query(int st, int dr)
{
int dif=dr-st+1;
val_log=(int)log2(dif);
return min(table[st][val_log],table[dr-(1<<(val_log))+1][val_log]);
}
int main() {
f >> n >> m;
for (int i=1; i<=n; i++)
{
f >> table[i][0];
}
creeare_table(table);
for (int query=1; query<=m; ++query)
{
f >> st >> dr;
g << rezolvare_query(st,dr) << '\n';
}
return 0;
}