Pagini recente » Cod sursa (job #779245) | Cod sursa (job #2909605) | Rating Cristi Mamota (SonnyXD) | Istoria paginii runda/racovita_combate_stresul_11_12/clasament | Cod sursa (job #2399793)
#include <fstream>
#include <iostream>
#define MAX 100001
#define MAX_POWER 20
using namespace std;
int v[MAX], dp[MAX][MAX_POWER];
int log(int n)
{
int copie, contor = 0;
copie = 1;
while(copie < n)
{
copie *= 2;
contor++;
}
return contor;
}
int main()
{
int n, m, i, j, in, sf, logaritm;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin >> n >> m;
for(i = 1; i <= n; i++)
{
fin >> v[i];
dp[i][0] = i;
}
for(j = 1; 1 << j <= n; j++)
{
//cout << j << ": ";
for(i = 1; i + (1 << j) - 1 <= n; i++)
{
if(v[dp[i][j - 1]] < v[dp[i + (1 << (j - 1))][j - 1]])dp[i][j] = dp[i][j - 1];
else dp[i][j] = dp[i + (1 << (j - 1))][j - 1];
//cout << dp[i][j] << " ";
}
// cout << endl;
}
for(i = 1; i <= m; i++)
{
fin >> in >> sf;
logaritm = log(sf - in + 1) - 1;
//cout << logaritm << endl;
fout << min(v[dp[in][logaritm]], v[dp[sf - (1 << logaritm) + 1][logaritm]]) << '\n';
}
fin.close();
fout.close();
return 0;
}