func_code_string: #include <bits/stdc++.h>      using namespace std;   const int c=200002, k=20;   int n, q, p[c], szint[c], fel[c][k], f[c], db[c];   long long aa[c], bb[c], dist[c], val[c], sum;   bool v[c];   set<int> s;   int lca(int a, int b) {       if (szint[a]<szint[b]) {           swap(a, b);       }       for (int i=k-1; i>=0; i--) {           if (szint[fel[a][i]]>=szint[b]) {               a=fel[a][i];           }       }       if (a==b) {           return a;       }       for (int i=k-1; i>=0; i--) {           if (fel[a][i]!=fel[b][i]) {               a=fel[a][i], b=fel[b][i];           }       }       return f[a];   }   long long tav(int a, int b) {       int koz=lca(a, b);       return dist[a]+dist[b]-2*dist[koz];   }   void keres(int a, int &l, int &r) {       auto it=s.find(a);       --it;       l=*it;       ++it, ++it;       if (it!=s.end()) {           r=*it;       }   }   void add(int a) {       s.insert(a);       int l=0, r=0;       keres(a, l, r);       sum+=tav(l, a)+tav(a, r)-tav(l, r);   }   void cl(int a) {       int l=0, r=0;       keres(a, l, r);       sum-=tav(l, a)+tav(a, r)-tav(l, r);       s.erase(a);   }   int main()   {       ios_base::sync_with_stdio(false);       cin >> n >> q;       p[0]=n+1;       for (int i=1; i<=n; i++) {           cin >> p[i];           f[i]=i-1;           while (p[i]>p[f[i]]) {               f[i]=f[f[i]];           }           szint[i]=szint[f[i]]+1;           fel[i][0]=f[i];           for (int j=1; j<k; j++) {               fel[i][j]=fel[fel[i][j-1]][j-1];           }       }       for (int i=1; i<=n; i++) {           cin >> aa[i];           val[i]+=aa[i];       }       for (int i=1; i<=n; i++) {           cin >> bb[i];           val[i]-=bb[i];           val[f[i]]+=bb[i];       }       for (int i=n; i>=1; i--) {           if (val[i]<0) {               val[f[i]]+=val[i];               val[i]=0;           }       }       for (int i=1; i<=n; i++) {           dist[i]=dist[f[i]]+val[i];       }       db[0]=1;       s.insert(0);       for (int i=1; i<=q; i++) {           int x; cin >> x;           if (!v[x]) {               v[x]=1;               if (++db[f[x]]==1) {                   add(f[x]);               }           } else {               v[x]=0;               if (--db[f[x]]==0) {                   cl(f[x]);               }           }           cout << sum/2+val[0] <<   n ;       }       return 0;   }   