Pagini recente » Cod sursa (job #2914599) | Cod sursa (job #809872) | Cod sursa (job #1593902) | Cod sursa (job #139897) | Cod sursa (job #1899102)
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int n, m, b, x, y, s;
vector <int> a, q; // a - numerele, q - maximele pe intervale
int main()
{
ifstream cin ("arbint.in" );
ofstream cout("arbint.out");
cin >> n >> m;
s = sqrt(n);
a.resize(n + 1);
q.resize(s + 1);
for (int i = 0; i < n; i++)
cin >> a[i];
for (int i = 0; i < a.size(); i++)
q[i] = *(max_element(a.begin() + i * s, a.end() + (i + 1) * s ));
for (int i = 0; i < m; i++)
{
cin >> b >> x >> y;
x--;
if (b)
{ //atribuirea
a[x] = y;
q[x / s] = *(max_element(a.begin() + (x / s) , a.begin() + (x / s) + 1 ));
}
else
{ //maximul
y--;
int t = -1, first_sqrt = 1 + x / s, last_sqrt = y / s;
t = max(t, *(max_element( a.begin() + x, a.begin() + s * first_sqrt)) );
for (int i = first_sqrt; i < last_sqrt; i++)
t = max(t, q[i]);
t = max(t, *(max_element( a.begin() + s * last_sqrt, a.begin() + y)) );
cout << t << '\n';
}
}
return 0;
}