Pagini recente » Cod sursa (job #19055) | Cod sursa (job #2156796) | Cod sursa (job #741980) | Cod sursa (job #1960891) | Cod sursa (job #3162223)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
vector<int> v, v2;
int n, m, rad;
int maxim(int a, int b)
{
int mx = 0;
int start = a / rad + 1, stop = b / rad;
for (int i = start; i < stop; i++)
mx = max(mx, v2[i]);
for (int i = a; i < start*rad; i++)
mx = max(mx, v[i]);
for (int i = stop*rad; i <= b; i++)
mx = max(mx, v[i]);
return mx;
}
void modif(int a, int b)
{
v[a] = b;
int start = a / rad;
v2[start] = 0;
for (int i = start*rad; i <= (start+1)*rad-1 && i < n; i++)
{
v2[start] = max(v2[start], v[i]);
}
}
int main()
{
fin >> n >> m;
rad = sqrt(n);
int len = 0;
for (int i = 0; i < n; i++)
{
int x;
fin >> x;
v.push_back(x);
if (len >= rad || i == 0)
{
len = 1;
v2.push_back(x);
}
if (len < rad)
{
len++;
v2[v2.size()-1] = max(v2[v2.size()-1], x);
}
}
for (int i = 0; i < m; i++)
{
int op, a, b;
fin >> op >> a >> b;
a = a - 1;
if (op == 0)
{
b = b - 1;
fout << maxim(a, b) << "\n";
}
else if (op == 1) modif(a, b);
}
return 0;
}