func_code_string: #include <bits/stdc++.h>   using namespace std;   int times, used[200010], t[200010], first[200010], last[200010], d[200010], n,       a[200010];   vector<vector<int> > g(200010);   void dfs(int v, int pr) {     used[v] = 1;     first[v] = ++times;     d[v] = d[pr] + 1;     for (int i = 0; i < g[v].size(); i++) {       if (!used[g[v][i]]) dfs(g[v][i], v);     }     last[v] = times;   }   int f(int i) { return (i & (-i)); }   void in(int i, int val) {     while (i <= n) {       t[i] += val;       i = i + f(i);     }   }   int gget(int i) {     int res = 0;     while (i > 0) {       res += t[i];       i = i - f(i);     }     return res;   }   int main() {     int m, i, x, y, val, q;     cin >> n >> m;     for (i = 1; i <= n; i++) {       cin >> a[i];     }     for (i = 0; i < n - 1; i++) {       cin >> x >> y;       g[x].push_back(y);       g[y].push_back(x);     }     dfs(1, 0);     for (i = 0; i < m; i++) {       scanf( %d , &q);       scanf( %d , &x);       if (q == 1) {         scanf( %d , &val);         in(first[x], val * (d[x] % 2 == 0 ? 1 : -1));         in(last[x] + 1, val * (d[x] % 2 == 0 ? -1 : 1));       } else {         int ans = gget(first[x]) * (d[x] % 2 == 0 ? 1 : -1) + a[x];         printf( %d n , ans);       }     }     return 0;   }   