Pagini recente » Cod sursa (job #518938) | Cod sursa (job #1192016) | Cod sursa (job #1465260) | Cod sursa (job #1043001) | Cod sursa (job #2988733)
#include <fstream>
#include <cmath>
using namespace std;
const int Nmax = 100000;
const int Sq_n = sqrt(Nmax);
const int BatogSize = (Nmax + Sq_n - 1) / Sq_n;
int v[Nmax], batog[BatogSize];
void update(int a, int b){
int nrinterval;
nrinterval = a / Sq_n;
v[a] = b;
batog[nrinterval] = 0;
for(int i = Sq_n * nrinterval; i < Sq_n * (nrinterval + 1); i++){
batog[nrinterval] = max(batog[nrinterval], v[i]);
}
}
int query(int a, int b){
int firstinterval, lastinterval, result;
firstinterval = (a + Sq_n - 1) / Sq_n * Sq_n;
lastinterval = b / Sq_n * Sq_n;
result = 0;
while(a <= b && a < firstinterval){
result = max(result, v[a]);
a++;
}
while(a <= b && lastinterval <= b){
result = max(result, v[b]);
b--;
}
firstinterval /= Sq_n;
lastinterval /= Sq_n;
while(firstinterval < lastinterval){
result = max(result, batog[firstinterval]);
firstinterval++;
}
return result;
}
int main()
{
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, optype, a, b, nrinterval, cnt;
fin >> n >> m;
nrinterval = 0;
cnt = 0;
batog[0] = 0;
for(int i = 0; i < n; i++){
fin >> v[i];
batog[nrinterval] = max(batog[nrinterval], v[i]);
cnt++;
if(cnt >= Sq_n){
cnt = 0;
nrinterval++;
batog[nrinterval] = 0;
}
}
for(int i = 0; i < m; i++){
fin >> optype >> a >> b;
if(optype == 0){
fout << query(a - 1, b - 1) << '\n';
}
else{
update(a - 1, b);
}
}
return 0;
}