Pagini recente » Cod sursa (job #232428) | Cod sursa (job #229861) | Cod sursa (job #2709277) | Cod sursa (job #953351) | Cod sursa (job #3124864)
#include <bits/stdc++.h>
typedef struct _Tree {
struct _Tree *left_son, *right_son;
int info;
}Tree;
int aux = 1, *v;
inline void init(Tree *T, int left, int right) {
if (left == right) {
T -> info = v[aux];
++ aux;
}
else {
int middle = (left + right) >> 1;
T -> left_son = (Tree*)malloc(sizeof(Tree));
T -> right_son = (Tree*)malloc(sizeof(Tree));
init(T -> left_son, left, middle);
init(T -> right_son, middle + 1, right);
T -> info = std :: min(T -> left_son -> info, T -> right_son -> info);
}
}
int x, y;
inline void update(Tree *T, int left, int right) {
if (left == right)
T -> info = y;
else {
int middle = (left + right) >> 1;
if (x <= middle)
update(T -> left_son, left, middle);
else
update(T -> right_son, middle + 1, right);
T -> info = std :: min(T -> left_son -> info, T -> right_son -> info);
}
}
int minn;
inline void query(Tree *T, int left, int right) {
if (x <= left and right <= y)
minn = std :: min(minn, T -> info);
else {
int middle = (left + right) >> 1;
if (x <= middle)
query(T -> left_son, left, middle);
if (y > middle)
query(T -> right_son, middle + 1, right);
}
}
int n, m, i;
char C;
int main() {
std :: ifstream fin("data.in");
fin >> n >> m;
v = (int*)malloc(sizeof(int) * (n + 1));
for (i = 1; i <= n; ++ i)
fin >> v[i];
Tree *T = (Tree*)malloc(sizeof(Tree));
init(T, 1, n);
free(v);
std :: ofstream fout("data.out");
while (m) {
-- m;
fin >> C >> x >> y;
if (C == '1')
update(T, 1, n);
else {
minn = 2000000000;
query(T, 1, n);
fout << minn << '\n';
}
}
fin.close();
fout.close();
return 0;
}