func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 200010, maxm = 2 * maxn;   int n, m, a[maxn], L[maxn], R[maxn], dn, dep[maxn];   struct edge {     int j, d;     edge *nx;   } e[maxm], *v[maxn];   int en;   inline void add_e(int i, int j, int d) {     e[++en].nx = v[i];     v[i] = e + en;     v[i]->j = j;     v[i]->d = d;   }   struct vt {     int l, r, k, mk;     vt *c[2];   } * rt;   struct LineTree {     inline vt *nw(int l, int r) {       vt *x = new vt;       x->l = l;       x->r = r;       x->k = x->mk = 0;       x->c[0] = x->c[1] = 0;       return x;     }     void build(vt *x) {       int mid = (x->l + x->r) >> 1;       x->c[0] = nw(x->l, mid);       x->c[1] = nw(mid + 1, x->r);     }     inline void clr(int l, int r) { rt = nw(l, r); }     inline void mark(vt *x, int k) {       x->mk += k;       x->k += (x->r - x->l + 1) * k;     }     inline void push(vt *x) {       if (!x->mk) return;       mark(x->c[0], x->mk);       mark(x->c[1], x->mk);       x->mk = 0;     }     inline void upd(vt *x) { x->k = x->c[0]->k + x->c[1]->k; }     int get(vt *x, int l, int r) {       if (l > x->r || r < x->l) return 0;       if (l <= x->l && x->r <= r) return x->k;       if (!x->c[0]) build(x);       push(x);       return get(x->c[0], l, r) + get(x->c[1], l, r);     }     void add(vt *x, int l, int r, int k) {       if (l > x->r || r < x->l) return;       if (l <= x->l && x->r <= r) {         mark(x, k);         return;       }       if (!x->c[0]) build(x);       push(x);       add(x->c[0], l, r, k);       add(x->c[1], l, r, k);       upd(x);     }   } lt;   void dfs(int i, int p, int d) {     dep[i] = d;     L[i] = ++dn;     for (edge *e = v[i]; e; e = e->nx)       if (e->j != p) dfs(e->j, i, d + 1);     R[i] = dn;   }   int main() {     int i, j, k, t, ii, jj, kk, tt;     scanf( %d%d , &n, &m);     for (i = 1; i <= n; i++) scanf( %d , a + i);     for (k = 1; k < n; k++) {       scanf( %d%d , &i, &j);       add_e(i, j, 0);       add_e(j, i, 0);     }     lt.clr(1, n);     dn = 0;     dfs(1, 0, 0);     for (i = 1; i <= n; i++) {       if (dep[i] & 1) a[i] = -a[i];       lt.add(rt, L[i], L[i], a[i]);     }     while (m--) {       scanf( %d , &k);       if (k == 1) {         scanf( %d%d , &i, &j);         if (dep[i] & 1) j = -j;         lt.add(rt, L[i], R[i], j);       } else {         scanf( %d , &i);         t = lt.get(rt, L[i], L[i]);         if (dep[i] & 1) t = -t;         printf( %d n , t);       }     }     return 0;   }   