按照第一篇题解打的
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define rg register
typedef pair<int,int> PII;
inline int read();
const int mod = 1000000,inf=214748364;
struct node{
int s[2],v;
int p;
int sz;
void init(int _v,int _p){
v = _v;p=_p;
s[1] = s[0] = 0;
}
}tr[200010];
int root;
inline void rotate(rg int x){
int y = tr[x].p;
int z =tr[y].p;
int k = (tr[y].s[1] == x);
tr[z].s[y==tr[z].s[1]] = x; tr[x].p = z;
tr[y].s[k]=tr[x].s[k ^ 1];tr[tr[x].s[k ^ 1]].p = y;
tr[x].s[k ^ 1] = y;tr[y].p=x;
//pushup(y);pushup(x);
}
inline void splay(rg int x,int k){
while(tr[x].p != k){
int y = tr[x].p;
int z = tr[y].p;
if(z != k){
if((tr[y].s[1] == x) ^ (tr[z].s[1] == y)){
rotate(y);
}
else rotate(x);
}
rotate(x);
}
if(!k) root = x;
}
int idx;
inline void insert(rg int x){
int u = root;
int p = 0;
while(u){
p=u;u=tr[u].s[x > tr[u].v];
}
u=++idx;
if(p){
tr[p].s[x > tr[p].v] = u;
}
tr[u].init(x,p);
splay(u,0);
}
//void insert(int x){
// int u = root;
// int p = 0;
// while(u){
// p=u;u=tr[u].s[x > tr[u].v];
// }
// u=++idx;
// if(p){
// tr[p].s[x > tr[p].v] = u;
// }
// tr[u].init(x,p);
// splay(u,0);
//}
inline void find_val(rg int x)
{
int u=root;
if(!u)return;
while(tr[u].s[x>tr[u].v]&& x!=tr[u].v)
u=tr[u].s[x>tr[u].v];
splay(u,0);
}
inline int lower_nxt(rg int x,rg int f)
{
find_val(x);
int u=root;
if(tr[u].v>=x&&f)return u;
if(tr[u].v<=x&&!f)return u;
u=tr[u].s[f];
while(tr[u].s[f^1])u=tr[u].s[f^1];
return u;
}
inline int upper_nxt(rg int x,rg int f){//1 da 0 xiao
find_val(x);
int u=root;
if(tr[u].v>x&&f)return u;
if(tr[u].v<x&&!f)return u;
u=tr[u].s[f];
while(tr[u].s[f^1])u=tr[u].s[f^1];
return u;
}
inline void del(rg int x){
int l = upper_nxt(x,0);
int r =upper_nxt(x,1);
splay(l,0);splay(r,l);
tr[r].s[0] = 0;
}
signed main(){
// freopen("pet.txt","r",stdin);
// freopen("ans.out","w",stdout);
int sum =0;//宠-人
int n = read();
int ans =0;
insert(-214748364),insert(2147483607);
int op,x;
for(rg int i=1;i<=n;i++){
op=read();
x = read();
//cout<<op<<" "<<x<<endl;
if(sum == 0){
insert(x);
}
if(sum > 0){
if(op == 0){
insert(x);
}
else{
int xiao = tr[lower_nxt(x,0)].v;
int da = tr[lower_nxt(x,1)].v;
if(abs(xiao - x) <= abs(da - x)){
ans= (ans + abs(xiao-x)) % mod;
del(xiao);
}
else{
ans= (ans+abs(da -x))%mod;
del(da);
}
}
}
if(sum < 0){
if(op == 1){
insert(x);
}
else{
int xiao = tr[lower_nxt(x,0)].v;
int da = tr[lower_nxt(x,1)].v;
if(abs(xiao - x) <= abs(da - x)){
ans=(ans+abs(xiao-x)) % mod;
del(xiao);
}
else{
ans= (ans + abs(da -x)) % mod;
del(da);
}
}
}
if(op == 0) sum++;
else sum--;
}
cout<<ans % mod;
return 0;
}
inline int read() {
int res = 0;
char ch;
while (!isdigit(ch = getchar())) continue;
do {
res = res * 10 + ch - '0';
} while (isdigit(ch = getchar()));
return res;
}