求求了,求调
#include <bits/stdc++.h>
#define rep(i, a, b) for(int i = (a); i <= (b); i++)
#define pre(i, a, b) for(int i = (a); i >= (b); i--)
#define Ede(i, u) for(int i = h[u]; i; i = ne[i])
#define go(i, a) for(auto i : a)
//#define int long long
#define uint unsigned int
#define LL long long
#define ULL unsigned long long
#define PII pair<int, int>
#define PIL pair<int, long long>
#define PLI pair<long long, int>
#define PLL pair<long long, long long>
#define mp make_pair
#define eb emplace_back
#define opb pop_back
#define pb push_back
#define pf push_front
#define fi first
#define se second
#define sf scanf
#define prf printf
#define el putchar('\n')
#define mms(arr, n) memset(arr, n, sizeof(arr))
#define mmc(arr1, arr2) memcpy(arr1, arr2, sizeof(arr2))
#define Db(x) prf("test(%s): ", x)
const int inf = 0x3f3f3f3f;
template <typename T> inline void rd(T &x){
x = 0; bool f = true; char ch = getchar();
while(ch < '0' || ch > '9'){ if(ch == '-') f = false; ch = getchar();}
while(ch >= '0' && ch <= '9'){ x = (x << 1) + (x << 3) + (ch ^ '0'); ch = getchar();}
if(!f) x = -x;
}
template <typename T, typename ...Args> inline void rd(T &x, Args &...args){ rd(x); rd(args...);}
#define ls(x) (x << 1)
#define rs(x) (x << 1 | 1)
using namespace std;
const int N = 5e5 + 10;
int n, k, q;
PII chan[N];
int h[N], len;
int a[N];
//---
LL Num[N << 2], Sum[N << 2], Pos[N << 2];
void pushup(int p){
Num[p] = Num[ls(p)] + Num[rs(p)];
Sum[p] = Sum[ls(p)] + Sum[rs(p)];
}
void modify(int p, int l, int r, int pos, int t){
if(l == r){
Sum[p] += t;
Num[p] += t * h[pos];
Pos[p] = pos;
return;
}
int mid = (l + r) >> 1;
if(pos <= mid) modify(ls(p), l, mid, pos, t);
else modify(rs(p), mid + 1, r, pos, t);
pushup(p);
}
int qsum(int p, int l, int r, int ql, int qr){
if(ql <= l && r <= qr) return Sum[p];
int res = 0;
int mid = (l + r) >> 1;
if(ql <= mid) res += qsum(ls(p), l, mid, ql, qr);
if(mid < qr) res += qsum(rs(p), mid + 1, r, ql, qr);
return res;
}
int qpos(int p, int l, int r, int pos){
if(l == r) return Pos[p];
int mid = (l + r) >> 1;
int temp = qsum(1, 1, len, mid + 1, r);
if(temp >= pos) return qpos(rs(p), mid + 1, r, pos);
else return qpos(ls(p), l, mid, pos - temp);
}
LL qnum(int p, int l, int r, int ql, int qr){
if(ql <= l && r <= qr) return Num[p];
LL res = 0;
int mid = (l + r) >> 1;
if(ql <= mid) res += qnum(ls(p), l, mid, ql, qr);
if(mid < qr) res += qnum(rs(p), mid + 1, r, ql, qr);
return res;
}
int main(){
/*
freopen(".in", "r", stdin);
freopen(".out", "w", stdout);
*/
rd(n, k, q);
rep(i, 1, q){
int x, y; rd(x, y);
chan[i] = {x, y};
h[i] = y;
}
sort(h + 1, h + q + 1);
len = unique(h + 1, h + q + 1) - (h + 1); //test
rep(i, 1, q) chan[i].se = lower_bound(h + 1, h + len + 1, chan[i].se) - h;
// rep(i, 1, len) prf("%d\n", h[i]);
rep(i, 1, q){
int x = chan[i].fi, y = chan[i].se;
int temp = a[x]; a[x] = y;
modify(1, 1, len, temp, -1);
modify(1, 1, len, a[x], 1);
int idx = qpos(1, 1, len, k);
// Db("idx"); prf("%d\n", idx);
idx = max(idx, 1);
prf("%lld\n", qnum(1, 1, len, idx, len));
}
return 0;
}