#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN=1000010,p=1000000;
int n,son[MAXN][2],fa[MAXN],cnt,num,k,x;
int tot[MAXN],sze[MAXN],root,val[MAXN],ans;
inline void clear(int x){
sze[x]=fa[x]=son[x][0]=son[x][1]=tot[x]=val[x]=0;
}
bool get(int x){
return x==son[fa[x]][1];
}
inline void maintain(int x){
sze[x]=sze[son[x][0]]+sze[son[x][1]]+tot[x];
}
inline void rotate(int x){
int y=fa[x],z=fa[y],k=get(x);
son[y][k]=son[x][k^1];
fa[son[x][k^1]]=y;
son[x][k^1]=y;
fa[y]=x;
fa[x]=z;
if(z)
son[z][son[z][1]==y]=x;
maintain(y);
maintain(x);
}
inline void splay(int x,int k){
for(int y=fa[x];y!=k;rotate(x),y=fa[x])
if(fa[y]!=k)
rotate((get(x)==get(y))?y:x);
if(!k)
root=x;
}
inline void insert(int k){
if(!root){
val[++cnt]=k;
++tot[cnt];
root=cnt;
maintain(root);
return;
}
int x=root,y=0;
while(1){
if(val[x]==k){
++tot[x];
maintain(x);
maintain(y);
splay(x,0);
break;
}
y=x;
x=son[x][(val[x]<k)];
if(!x){
val[++cnt]=k;
++tot[cnt];
fa[cnt]=y;
son[y][(val[y]<k)]=cnt;
maintain(cnt);
maintain(y);
splay(cnt,0);
break;
}
}
}
inline int find_num(int k){
int x=root;
if(sze[x]<k)
return -1;
while(1){
if(son[x][0]&&k<=sze[son[x][0]])
x=son[x][0];
else{
int temp=sze[son[x][0]]+tot[x];
if(k<=temp)
return val[x];
k-=temp;
x=son[x][1];
}
}
}
inline int find_rank(int k)
{
int ans=0,x=root;
if(!x)
return -1;
while(1){
if(k<val[x])
x=son[x][0];
else{
ans+=sze[son[x][0]];
if(k==val[x]){
splay(x,0);
return ans+1;
}
ans+=tot[x];
x=son[x][1];
}
}
}
inline int pre()
{
int x=son[root][0];
while(son[x][1])
x=son[x][1];
splay(x,0);
return x;
}
inline int nxt()
{
int x=son[root][1];
while(son[x][0])
x=son[x][0];
splay(x,0);
return x;
}
inline void del(int k)
{
int temp=find_rank(k);
if(temp==-1)
return;
if(tot[root]>1){
--tot[root];
maintain(root);
return;
}
else if(!son[root][0]&&!son[root][1]){
clear(root);
root=0;
return;
}
else if(!son[root][0]){
int x=root;
root=son[x][1];
fa[root]=0;
clear(x);
return;
}
else if(!son[root][1]){
int x=root;
root=son[x][0];
fa[root]=0;
clear(x);
return;
}
int x=root,pre1=pre();
fa[son[x][1]]=pre1;
son[pre1][1]=son[x][1];
clear(x);
maintain(root);
return;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%lld%lld",&k,&x);
if(num==0)
insert(x);
else if(num>0){
if(k==0)
insert(x);
else{
int temp1=val[pre()],temp2=val[nxt()];
if(abs(temp1-x)<=abs(temp2-x))
ans+=abs(temp1-x),del(temp1),cout<<abs(temp1-x)<<" 1"<<endl;
else
ans+=abs(temp2-x),del(temp2),cout<<abs(temp2-x)<<" 2"<<endl;
}
}
else{
if(k==1)
insert(x);
else{
int temp1=val[pre()],temp2=val[nxt()];
if(abs(temp1-x)<=abs(temp2-x))
ans+=abs(temp1-x),del(temp1),cout<<abs(temp1-x)<<" 3"<<endl;
else
ans+=abs(temp2-x),del(temp2),cout<<abs(temp2-x)<<" 4"<<endl;
}
}
if(k==0)
num++;
else
num--;
}
cout<<ans%p;
return 0;
}
我那还压着一篇求助帖呢5555555o(╥﹏╥)o