#include<bits/stdc++.h>
using namespace std;
#define db double
#define ll long long
#define ld long double
#define ull unsigned long long
#define pii pair <int, int>
#define fi first
#define se second
#define pb push_back
#define mem(x, v, s) memset(x, v, sizeof(x[0]) * (s))
#define cpy(x, y, s) memcpy(x, y, sizeof(x[0]) * (s))
const int N = 2e5 + 5;
int node, R[N], ls[N << 5], rs[N << 5], sz[N << 5];
ll val[N << 5], sum[N << 5];
void push(int x) {
val[x] = val[ls[x]] + val[rs[x]] + sum[ls[x]] * sz[rs[x]];
sum[x] = sum[ls[x]] + sum[rs[x]], sz[x] = sz[ls[x]] + sz[rs[x]];
}
void ins(int l, int r, int p, int &x) {
if(!x) x = ++node;
if(l == r) return sz[x]++, sum[x] += p, void();
int m = l + r >> 1;
if(p <= m) ins(l, m, p, ls[x]);
else ins(m + 1, r, p, rs[x]);
push(x);
}
int merge(int l, int r, int x, int y) {
if(!x || !y) return x | y;
assert(l != r);
int m = l + r >> 1;
ls[x] = merge(l, m, ls[x], ls[y]);
rs[x] = merge(m + 1, r, rs[x], rs[y]);
return push(x), x;
}
ll n, ans, a[N], b[N], f[N], l[N], tot[N];
int find(int x) {return f[x] == x ? x : f[x] = find(f[x]);}
ll cal(int x) {
ll res = l[x] * sum[R[x]] - tot[x];
return res + val[R[x]];
}
void UFS(int x, int y, bool tp) {
if(x >= N || y >= N) return;
x = find(x), y = find(y);
if(x == y || (!R[x] || !R[y]) && !tp) return;
ans -= cal(x), ans -= cal(y);
f[y] = x, l[x] = min(l[x], l[y]), tot[x] += tot[y];
R[x] = merge(1, n, R[x], R[y]);
ans += cal(x);
}
int main(){
cin >> n;
for(int i = 1; i < N; i++) f[i] = l[i] = i;
for(int i = 1; i <= n; i++) {
cin >> a[i] >> b[i];
int p = find(a[i]);
ans -= cal(p), ins(1, n, b[i], R[p]), tot[p] += a[i] * b[i];
ans += cal(p);
if(sz[R[p]] == 1) UFS(p, a[i] - 1, 0), UFS(p, a[i] + 1, 0);
else UFS(p, l[p] + sz[R[p]] - 1, 1), UFS(p, l[p] + sz[R[p]], 0);
cout << ans << endl;
}
return 0;
}