Pagini recente » Cod sursa (job #606647) | Cod sursa (job #120402) | Cod sursa (job #251847) | Cod sursa (job #2872228) | Cod sursa (job #1956298)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int N,M;
class SegmentTree
{
public:
void resize(int x)
{
size=x;
tree=new int[size<<2];
}
void update(int where, const int value)
{
tree[where += size] = value;
for (where /= 2; where > 0; where /= 2)
{
tree[where] = max(tree[2 * where], tree[2 * where + 1]);
}
}
int query(int from, int to) const
{
int value = -0x3f3f3f3f;
from += size;
to += size;
while (from <= to)
{
value = max(value, max(tree[from], tree[to]));
from = (from + 1) / 2;
to = (to - 1) / 2;
}
return value;
}
private:
int size;
int *tree;
};
int main()
{
f>>N>>M;
SegmentTree mySegmentTree;
mySegmentTree.resize(N);
for(int i=1; i<=N; i++)
{
int x;
f>>x;
mySegmentTree.update(i-1,x);
}
for(int i=1; i<=N; i++)
{
int t,x,y;
f>>t>>x>>y;
if(t==0) g<<mySegmentTree.query(x-1,y-1)<<'\n';
else mySegmentTree.update(x-1,y);
}
}