func_code_string: #include <bits/stdc++.h>   using namespace std;   void addmod(int &a, long long b) {     a = (a + b);     if (a >= 1000000007) a -= 1000000007;   }   void mulmod(int &a, long long b) { a = (a * b) % 1000000007; }   int gi() {     int a;     scanf( %d , &a);     return a;   }   long long gll() {     long long a;     scanf( %lld , &a);     return a;   }   class rangesum {     vector<long long> s;       public:     rangesum(const vector<int> &inp, const int &n) {       s.resize(n + 1);       for (int i = 0; i < n; i++) s[i + 1] = s[i] + inp[i];     }     long long get(int x, int y) { return s[y + 1] - s[x]; }   };   int main() {     int n = gi(), l, u;     vector<int> a(n);     for (auto i = 0; i < n; i++) {       a[i] = gi();     }     rangesum rs(a, n);     set<int> rm;     multiset<long long, greater<long long>> v;     rm.insert(-1);     rm.insert(n);     v.insert(rs.get(0, n - 1));     for (int i = 0; i < n; i++) {       int ix = gi() - 1;       auto it = rm.upper_bound(ix);       u = (*it) - 1;       it--;       l = (*it) + 1;       auto mit = v.find(rs.get(l, u));       assert(mit != v.end());       v.erase(mit);       if (ix > l) v.insert(rs.get(l, ix - 1));       if (ix < u) v.insert(rs.get(ix + 1, u));       rm.insert(ix);       printf( %lld n , (v.size() ? *v.begin() : 0));     }     return 0;   }   