#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef tree<
int,
null_type,
less<int>,
rb_tree_tag,
tree_order_statistics_node_update> ordered_set;

main()
{
    freopen("river.in", "r", stdin);
    freopen("river.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n, p;
    cin >> n >> p;
    ordered_set points;
    points.insert(0);
    int64_t ans = 0;
    while(n--)
    {
        int x;
        cin >> x;
        ans += x * x;
        points.insert(*--points.end() + x);
    }
    points.insert(2e9);
    cout << ans << "\n";
    cin >> n;
    while(n--)
    {
        int t, x;
        cin >> t >> x;
        auto it = points.find_by_order(x);
        auto it1 = it, it2 = it;
        int64_t v = *it;
        int64_t l = *--it1;
        int64_t ll = 0;
        if(l != 0)
            ll = *--it1;
        int64_t r = *++it2;
        ans -= (v - l) * (v - l);
        int m = (v + l) / 2;
        points.insert(m);
        if(t == 1)
        {
            points.erase(v);
            points.erase(l);
            if(l == 0)
            {
                points.erase(m);
                points.insert(l);
                ans -= (r - v) * (r - v);
                ans += r * r;
            }
            else if(r == 2e9)
            {
                points.erase(m);
                points.insert(v);
                ans -= (l - ll) * (l - ll);
                ans += (v - ll) * (v - ll);
            }
            else
            {
                ans -= (r - v) * (r - v);
                ans -= (l - ll) * (l - ll);
                ans += (r - m) * (r - m);
                ans += (m - ll) * (m - ll);
            }
        }
        else
        {
            ans += (m - v) * (m - v);
            ans += (m - l) * (m - l);
        }
        cout << ans << "\n";
    }
}