#include<bits/stdc++.h>
#define int long long
#define oo 1000000000000000000
#define ii pair<int, int>
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define uniq(x) x.erase(unique(all(x)), x.end())
#define pb push_back
using namespace std;
const int mod = 676767677;
const int N = 200005;
const int LOG = 19;
/*
Nếu mà mỗi khi một phòng đc thêm tiện tích mà phải duyệt qua mọi nhân viên thì rất mất thời gian
=> bonus[phòng] += val;
và đáp án sẽ là bonus[phòng đang ở] + base[]
do truy vấn 2 nên là nó sẽ giống việc update trên đoạn => dùng fenwick tree để update trên đoạn và get tại 1 điểm.
đang ở phòng B mà bị chuyển đến phòng A:
đáp án đúng là: base[u] + bonus[B]
=> đáp án lấy ra là: base[u] + bonus[A]
=> để đáp án lấy ra đúng => base[u] + bonus[B] - bonus[A]
(đây là giá trị đúng mà phải + thêm bonus[A] nữa nên sẽ trừ đi bonus[A])
*/
struct FenTree {
vector<int> bit;
int n;
void init(int _n) {
n = _n;
bit.assign(n + 1, 0);
}
void update(int pos, int val) {
for(int i = pos; i <= n; i += i&-i) {
bit[i] += val;
}
}
void update(int l, int r, int val) {
update(l, val);
update(r + 1, -val);
}
int get(int pos) {
int ans = 0;
for(int i = pos; i >= 1; i -= i&-i) {
ans += bit[i];
}
return ans;
}
} fen;
int f[N][LOG], hi[N];
vector<int> e[N];
void dfs(int u, int p) {
for(auto v: e[u]) {
if(v == p) continue;
f[v][0] = u;
hi[v] = hi[u] + 1;
dfs(v, u);
}
}
int lca(int u, int v) {
if(hi[u] > hi[v]) swap(u, v);
for(int i = LOG - 1; i >= 0; i--) {
if(hi[f[v][i]] >= hi[u]) {
v = f[v][i];
}
}
if(u == v) return u;
for(int i = LOG - 1; i >= 0; i--) {
if(f[u][i] != f[v][i]) {
u = f[u][i];
v = f[v][i];
}
}
return f[u][0];
}
int kc(int u, int v) {
return hi[u] + hi[v] - 2 * hi[lca(u, v)];
}
struct nhan {
int l, r, ph;
nhan(int _l, int _r, int _ph): l(_l), r(_r), ph(_ph) {}
bool operator < (const nhan &other) const {
return this->l < other.l;
}
};
set<nhan> st;
int bonus[N];
int n, m, q;
int a[N];
/*
Nếu update 1 đoạn từ L -> R thì để dễ xử lý thì biến mọi đoạn mình xử lý thành 1 đoạn ở trong set
=> split tại L và split tại R + 1
*/
set<nhan>::iterator split(int pos) {
if (pos > m) return st.end();
auto it = prev(st.upper_bound({pos, 0, 0}));
if (it->l == pos) return it;
int l = it->l, r = it->r, ph = it->ph;
st.erase(it);
st.insert({l, pos - 1, ph});
return st.insert({pos, r, ph}).first;
}
void solve() {
cin >> n >> m >> q;
for(int i = 1; i <= m; i++) {
cin >> a[i];
}
for(int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
e[u].pb(v);
e[v].pb(u);
}
hi[1] = 1;
dfs(1, 1);
for(int j = 1; j < LOG; j++) {
for(int i = 1; i <= n; i++) {
if(f[i][j - 1]) {
f[i][j] = f[f[i][j - 1]][j - 1];
}
}
}
fen.init(m);
for(int i = 1; i <= m; i++) {
int pos = i;
while(pos + 1 <= m && a[i] == a[pos + 1]) pos++;
st.insert(nhan(i, pos, a[pos]));
i = pos;
}
while(q--) {
char c; cin >> c;
if(c == 'e') {
int x, v; cin >> x >> v;
bonus[x] += v;
}
else if(c == 't') {
int l, r, z;
cin >> l >> r >> z;
auto R = split(r + 1);
auto L = split(l);
for(auto it = L; it != R; it++) {
int l = it->l;
int r = it->r;
int ph = it->ph;
int delta = bonus[ph] - bonus[z] - kc(ph, z);
fen.update(l, r, delta);
}
st.erase(L, R);
st.insert(nhan(l, r, z));
}
else {
int k;
cin >> k;
auto it = prev(st.upper_bound({k, 0, 0}));
cout << fen.get(k) + bonus[it->ph] << "\n";
}
}
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if(fopen("hsnv.inp", "r")) {
freopen("hsnv.inp", "r", stdin);
freopen("hsnv.out", "w", stdout);
}
int t = 1;
// cin >> t;
while(t--) {
solve();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgb28gMTAwMDAwMDAwMDAwMDAwMDAwMAojZGVmaW5lIGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgdW5pcSh4KSB4LmVyYXNlKHVuaXF1ZShhbGwoeCkpLCB4LmVuZCgpKQojZGVmaW5lIHBiIHB1c2hfYmFjawp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgbW9kID0gNjc2NzY3Njc3Owpjb25zdCBpbnQgTiA9IDIwMDAwNTsKY29uc3QgaW50IExPRyA9IDE5OwoKLyoKTuG6v3UgbcOgIG3hu5dpIGtoaSBt4buZdCBwaMOybmcgxJFjIHRow6ptIHRp4buHbiB0w61jaCBtw6AgcGjhuqNpIGR1eeG7h3QgcXVhIG3hu41pIG5ow6JuIHZpw6puIHRow6wgcuG6pXQgbeG6pXQgdGjhu51pIGdpYW4gCj0+IGJvbnVzW3Bow7JuZ10gKz0gdmFsOwoKdsOgIMSRw6FwIMOhbiBz4bq9IGzDoCBib251c1twaMOybmcgxJFhbmcg4bufXSArIGJhc2VbXQpkbyB0cnV5IHbhuqVuIDIgbsOqbiBsw6AgbsOzIHPhur0gZ2nhu5FuZyB2aeG7h2MgdXBkYXRlIHRyw6puIMSRb+G6oW4gPT4gZMO5bmcgZmVud2ljayB0cmVlIMSR4buDIHVwZGF0ZSB0csOqbiDEkW/huqFuIHbDoCBnZXQgdOG6oWkgMSDEkWnhu4NtLgoKxJFhbmcg4bufIHBow7JuZyBCIG3DoCBi4buLIGNodXnhu4NuIMSR4bq/biBwaMOybmcgQToKxJHDoXAgw6FuIMSRw7puZyBsw6A6IGJhc2VbdV0gKyBib251c1tCXQoKCj0+IMSRw6FwIMOhbiBs4bqleSByYSBsw6A6IGJhc2VbdV0gKyBib251c1tBXQo9PiDEkeG7gyDEkcOhcCDDoW4gbOG6pXkgcmEgxJHDum5nID0+IGJhc2VbdV0gKyBib251c1tCXSAtIGJvbnVzW0FdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoxJHDonkgbMOgIGdpw6EgdHLhu4sgxJHDum5nIG3DoCBwaOG6o2kgKyB0aMOqbSBib251c1tBXSBu4buvYSBuw6puIHPhur0gdHLhu6sgxJFpIGJvbnVzW0FdKQoKKi8Kc3RydWN0IEZlblRyZWUgewogICAgdmVjdG9yPGludD4gYml0OwogICAgaW50IG47CiAgICB2b2lkIGluaXQoaW50IF9uKSB7CiAgICAgICAgbiA9IF9uOwogICAgICAgIGJpdC5hc3NpZ24obiArIDEsIDApOwogICAgfQoKICAgIHZvaWQgdXBkYXRlKGludCBwb3MsIGludCB2YWwpIHsKICAgICAgICBmb3IoaW50IGkgPSBwb3M7IGkgPD0gbjsgaSArPSBpJi1pKSB7CiAgICAgICAgICAgIGJpdFtpXSArPSB2YWw7CiAgICAgICAgfQogICAgfQogICAgdm9pZCB1cGRhdGUoaW50IGwsIGludCByLCBpbnQgdmFsKSB7CiAgICAgICAgdXBkYXRlKGwsIHZhbCk7CiAgICAgICAgdXBkYXRlKHIgKyAxLCAtdmFsKTsKICAgIH0KICAgIGludCBnZXQoaW50IHBvcykgewogICAgICAgIGludCBhbnMgPSAwOwogICAgICAgIGZvcihpbnQgaSA9IHBvczsgaSA+PSAxOyBpIC09IGkmLWkpIHsKICAgICAgICAgICAgYW5zICs9IGJpdFtpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFuczsKICAgIH0KfSBmZW47CgppbnQgZltOXVtMT0ddLCBoaVtOXTsKdmVjdG9yPGludD4gZVtOXTsKdm9pZCBkZnMoaW50IHUsIGludCBwKSB7CiAgICBmb3IoYXV0byB2OiBlW3VdKSB7CiAgICAgICAgaWYodiA9PSBwKSBjb250aW51ZTsKICAgICAgICBmW3ZdWzBdID0gdTsKICAgICAgICBoaVt2XSA9IGhpW3VdICsgMTsKICAgICAgICBkZnModiwgdSk7CiAgICB9Cn0KaW50IGxjYShpbnQgdSwgaW50IHYpIHsKICAgIGlmKGhpW3VdID4gaGlbdl0pIHN3YXAodSwgdik7CiAgICBmb3IoaW50IGkgPSBMT0cgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIGlmKGhpW2Zbdl1baV1dID49IGhpW3VdKSB7CiAgICAgICAgICAgIHYgPSBmW3ZdW2ldOwogICAgICAgIH0KICAgIH0KICAgIGlmKHUgPT0gdikgcmV0dXJuIHU7CiAgICBmb3IoaW50IGkgPSBMT0cgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIGlmKGZbdV1baV0gIT0gZlt2XVtpXSkgewogICAgICAgICAgICB1ID0gZlt1XVtpXTsKICAgICAgICAgICAgdiA9IGZbdl1baV07CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZbdV1bMF07Cn0KCmludCBrYyhpbnQgdSwgaW50IHYpIHsKICAgIHJldHVybiBoaVt1XSArIGhpW3ZdIC0gMiAqIGhpW2xjYSh1LCB2KV07Cn0KCnN0cnVjdCBuaGFuIHsKICAgIGludCBsLCByLCBwaDsKICAgIG5oYW4oaW50IF9sLCBpbnQgX3IsIGludCBfcGgpOiBsKF9sKSwgcihfciksIHBoKF9waCkge30KICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgbmhhbiAmb3RoZXIpIGNvbnN0IHsKICAgICAgICByZXR1cm4gdGhpcy0+bCA8IG90aGVyLmw7CiAgICB9Cn07CnNldDxuaGFuPiBzdDsKaW50IGJvbnVzW05dOwppbnQgbiwgbSwgcTsKaW50IGFbTl07CgovKgpO4bq/dSB1cGRhdGUgMSDEkW/huqFuIHThu6sgTCAtPiBSIHRow6wgxJHhu4MgZOG7hSB44butIGzDvSB0aMOsIGJp4bq/biBt4buNaSDEkW/huqFuIG3DrG5oIHjhu60gbMO9IHRow6BuaCAxIMSRb+G6oW4g4bufIHRyb25nIHNldAo9PiBzcGxpdCB04bqhaSBMIHbDoCBzcGxpdCB04bqhaSBSICsgMQoqLwpzZXQ8bmhhbj46Oml0ZXJhdG9yIHNwbGl0KGludCBwb3MpIHsKICAgIGlmIChwb3MgPiBtKSByZXR1cm4gc3QuZW5kKCk7CiAgICBhdXRvIGl0ID0gcHJldihzdC51cHBlcl9ib3VuZCh7cG9zLCAwLCAwfSkpOwogICAgaWYgKGl0LT5sID09IHBvcykgcmV0dXJuIGl0OwogICAgaW50IGwgPSBpdC0+bCwgciA9IGl0LT5yLCBwaCA9IGl0LT5waDsKICAgIHN0LmVyYXNlKGl0KTsKICAgIHN0Lmluc2VydCh7bCwgcG9zIC0gMSwgcGh9KTsKICAgIHJldHVybiBzdC5pbnNlcnQoe3BvcywgciwgcGh9KS5maXJzdDsKfQoKCnZvaWQgc29sdmUoKSB7CiAgICBjaW4gPj4gbiA+PiBtID4+IHE7CgoKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICB9CgogICAgZm9yKGludCBpID0gMTsgaSA8IG47IGkrKykgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgZVt1XS5wYih2KTsKICAgICAgICBlW3ZdLnBiKHUpOwogICAgfQoKICAgIGhpWzFdID0gMTsKICAgIGRmcygxLCAxKTsKCiAgICBmb3IoaW50IGogPSAxOyBqIDwgTE9HOyBqKyspIHsKICAgICAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICBpZihmW2ldW2ogLSAxXSkgewogICAgICAgICAgICAgICAgZltpXVtqXSA9IGZbZltpXVtqIC0gMV1dW2ogLSAxXTsKICAgICAgICAgICAgfSAKICAgICAgICB9CiAgICB9CgogICAgZmVuLmluaXQobSk7CgogICAgZm9yKGludCBpID0gMTsgaSA8PSBtOyBpKyspIHsKICAgICAgICBpbnQgcG9zID0gaTsKICAgICAgICB3aGlsZShwb3MgKyAxIDw9IG0gJiYgYVtpXSA9PSBhW3BvcyArIDFdKSBwb3MrKzsKCiAgICAgICAgc3QuaW5zZXJ0KG5oYW4oaSwgcG9zLCBhW3Bvc10pKTsKICAgICAgICBpID0gcG9zOwogICAgfQoKICAgIHdoaWxlKHEtLSkgewogICAgICAgIGNoYXIgYzsgY2luID4+IGM7CiAgICAgICAgaWYoYyA9PSAnZScpIHsKICAgICAgICAgICAgaW50IHgsIHY7IGNpbiA+PiB4ID4+IHY7CiAgICAgICAgICAgIGJvbnVzW3hdICs9IHY7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoYyA9PSAndCcpIHsKICAgICAgICAgICAgaW50IGwsIHIsIHo7CiAgICAgICAgICAgIGNpbiA+PiBsID4+IHIgPj4gejsKCiAgICAgICAgICAgIGF1dG8gUiA9IHNwbGl0KHIgKyAxKTsKICAgICAgICAgICAgYXV0byBMID0gc3BsaXQobCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgZm9yKGF1dG8gaXQgPSBMOyBpdCAhPSBSOyBpdCsrKSB7CiAgICAgICAgICAgICAgICBpbnQgbCA9IGl0LT5sOwogICAgICAgICAgICAgICAgaW50IHIgPSBpdC0+cjsKICAgICAgICAgICAgICAgIGludCBwaCA9IGl0LT5waDsKICAgICAgICAgICAgICAgIGludCBkZWx0YSA9IGJvbnVzW3BoXSAtIGJvbnVzW3pdIC0ga2MocGgsIHopOwogICAgICAgICAgICAgICAgZmVuLnVwZGF0ZShsLCByLCBkZWx0YSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3QuZXJhc2UoTCwgUik7CiAgICAgICAgICAgIHN0Lmluc2VydChuaGFuKGwsIHIsIHopKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGludCBrOwogICAgICAgICAgICBjaW4gPj4gazsKICAgICAgICAgICAgYXV0byBpdCA9IHByZXYoc3QudXBwZXJfYm91bmQoe2ssIDAsIDB9KSk7CiAgICAgICAgICAgIGNvdXQgPDwgZmVuLmdldChrKSArIGJvbnVzW2l0LT5waF0gPDwgIlxuIjsKICAgICAgICB9CiAgICB9Cn0KIApzaWduZWQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBpZihmb3BlbigiaHNudi5pbnAiLCAiciIpKSB7CiAgICAgICAgZnJlb3BlbigiaHNudi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJoc252Lm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBpbnQgdCA9IDE7CiAgICAvLyBjaW4gPj4gdDsKICAgIHdoaWxlKHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICB9Cn0K