RT
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N=80010,INF=LLONG_MAX,MOD=1e6;
struct Treap_pet{
int l,r,key,val;
}tr_pet[N];
int n,root_pet,idx_pet;
int get_node_pet(int key){
tr_pet[++idx_pet].key=key;
tr_pet[idx_pet].val=rand();
return idx_pet;
}
void build_pet(){
get_node_pet(-INF);
get_node_pet(INF);
root_pet=1;
tr_pet[1].r=2;
}
void rotate_right_pet(int &p){
int q=tr_pet[p].l;
tr_pet[p].l=tr_pet[q].r;
tr_pet[q].r=p;
p=q;
}
void rotate_left_pet(int &p){
int q=tr_pet[p].r;
tr_pet[p].r=tr_pet[q].l;
tr_pet[q].l=p;
p=q;
}
void insert_pet(int &p,int key){
if(!p){
p=get_node_pet(key);
}else if(tr_pet[p].key>key){
insert_pet(tr_pet[p].l,key);
if(tr_pet[tr_pet[p].l].val>tr_pet[p].val){
rotate_right_pet(p);
}
}else{
insert_pet(tr_pet[p].r,key);
if(tr_pet[tr_pet[p].r].val>tr_pet[p].val){
rotate_left_pet(p);
}
}
}
void remove_pet(int &p,int key){
if(!p){
return;
}
if(tr_pet[p].key==key){
if(tr_pet[p].l||tr_pet[p].r){
if(!tr_pet[p].r||tr_pet[tr_pet[p].l].val>tr_pet[tr_pet[p].r].val){
rotate_right_pet(p);
remove_pet(tr_pet[p].r,key);
}else{
rotate_left_pet(p);
remove_pet(tr_pet[p].l,key);
}
}else{
p=0;
}
}else if(tr_pet[p].key>key){
remove_pet(tr_pet[p].l,key);
}else{
remove_pet(tr_pet[p].r,key);
}
}
int get_prev_pet(int &p,int key){
if(!p){
return -INF;
}
if(tr_pet[p].key>key){
return get_prev_pet(tr_pet[p].l,key);
}
return max(tr_pet[p].key,get_prev_pet(tr_pet[p].r,key));
}
int get_next_pet(int &p,int key){
if(!p){
return INF;
}
if(tr_pet[p].key<key){
return get_next_pet(tr_pet[p].r,key);
}
return min(tr_pet[p].key,get_next_pet(tr_pet[p].l,key));
}
struct Treap_human{
int l,r,key,val;
}tr_human[N];
int root_human,idx_human;
int get_node_human(int key){
tr_human[++idx_human].key=key;
tr_human[idx_human].val=rand();
return idx_human;
}
void build_human(){
get_node_human(-INF);
get_node_human(INF);
root_human=1;
tr_human[1].r=2;
}
void rotate_right_human(int &p){
int q=tr_human[p].l;
tr_human[p].l=tr_human[q].r;
tr_human[q].r=p;
p=q;
}
void rotate_left_human(int &p){
int q=tr_human[p].r;
tr_human[p].r=tr_human[q].l;
tr_human[q].l=p;
p=q;
}
void insert_human(int &p,int key){
if(!p){
p=get_node_human(key);
}else if(tr_human[p].key>key){
insert_human(tr_human[p].l,key);
if(tr_human[tr_human[p].l].val>tr_human[p].val){
rotate_right_human(p);
}
}else{
insert_human(tr_human[p].r,key);
if(tr_human[tr_human[p].r].val>tr_human[p].val){
rotate_left_human(p);
}
}
}
void remove_human(int &p,int key){
if(!p){
return;
}
if(tr_human[p].key==key){
if(tr_human[p].l||tr_human[p].r){
if(!tr_human[p].r||tr_human[tr_human[p].l].val>tr_human[tr_human[p].r].val){
rotate_right_human(p);
remove_human(tr_human[p].r,key);
}else{
rotate_left_human(p);
remove_human(tr_human[p].l,key);
}
}else{
p=0;
}
}else if(tr_human[p].key>key){
remove_human(tr_human[p].l,key);
}else{
remove_human(tr_human[p].r,key);
}
}
int get_prev_human(int &p,int key){
if(!p){
return -INF;
}
if(tr_human[p].key>key){
return get_prev_human(tr_human[p].l,key);
}
return max(tr_human[p].key,get_prev_human(tr_human[p].r,key));
}
int get_next_human(int &p,int key){
if(!p){
return INF;
}
if(tr_human[p].key<key){
return get_next_human(tr_human[p].r,key);
}
return min(tr_human[p].key,get_next_human(tr_human[p].l,key));
}
int cnt_pet,cnt_human,ans;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
build_pet();
build_human();
cin>>n;
while(n--){
int opt,x;
cin>>opt>>x;
if(opt==0){
if(cnt_human){
int a=get_prev_human(root_human,x),b=get_next_human(root_human,x);
if(abs(x-a)<=abs(x-b)){
ans+=abs(x-a);
ans%=MOD;
remove_human(root_human,a);
cnt_human--;
}else{
ans+=abs(x-b);
ans%=MOD;
remove_human(root_human,b);
cnt_human--;
}
}else{
insert_pet(root_pet,x);
cnt_pet++;
}
}else{
if(cnt_pet){
int a=get_prev_pet(root_pet,x),b=get_next_pet(root_pet,x);
if(abs(x-a)<=abs(x-b)){
ans+=abs(x-a);
ans%=MOD;
remove_pet(root_pet,a);
cnt_pet--;
}else{
ans+=abs(x-b);
ans%=MOD;
remove_pet(root_pet,b);
cnt_pet--;
}
}else{
insert_pet(root_human,x);
cnt_human++;
}
}
}
cout<<ans%MOD;
return 0;
}