#include <bits/stdc++.h>
using namespace std;
#define For(i, a, b) for(int i=(a);i<=(b);i++)
#define Ror(i, a, b) for(int i=(a);i>=(b);i--)
const int N = 8e4+10;
int rt, n, cnt, ans, mod = 1000000;
int d[3];
struct Node{
int ls, rs, v, num, pri;
}f[N];
void newnode(int x)
{
f[++cnt].ls = f[cnt].rs = 0;
f[cnt].num = 1;
f[cnt].v = x;
f[cnt].pri = rand();
}
void update(int k)
{
f[k].num = f[f[k].ls].num+f[f[k].rs].num+1;
}
int merge(int k1, int k2)
{
if(!k1||!k2) return k1+k2;
if(f[k1].pri<f[k2].pri)
{
f[k1].rs = merge(f[k1].rs, k2);
update(k1);
return k1;
}
else
{
f[k2].ls = merge(k1, f[k2].ls);
update(k2);
return k2;
}
}
void split(int k, int &L, int &R, int x)
{
if(!k) return L = R = 0, void();
if(f[k].v<=x) L = k, split(f[k].rs, f[k].rs, R, x);
else R = k, split(f[k].ls, L, f[k].ls, x);
update(k);
}
int kth(int k, int x)
{
if(f[f[k].ls].num+1==x) return f[k].v;
if(f[f[k].ls].num>=x) return kth(f[k].ls, x);
return kth(f[k].rs, x-f[f[k].ls].num-1);
}
int find(int x)
{
int L, R, p, tmp, tr, res = INT_MAX;
split(rt, L, R, x);
int pd;
if(L) tmp = kth(L, f[L].num), res = abs(x-tmp), pd = 1;
if(R) tr = kth(R, 1), abs(tr-x)<res?res=abs(tr-x), pd = 2:res = res;
if(pd==1) split(L, L, p, tmp-1);
else split(R, p, R, tr);
rt = merge(L, R);
return res;
}
void insert(int x)
{
newnode(x);
int L, R;
split(rt, L, R, x);
rt = merge(merge(L, cnt), R);
}
int main()
{
srand(NULL);
cin >> n;
For(i, 1, n)
{
int op, x;
cin >> op >> x;
if(op)
{
if(d[0]) ans = (ans+find(x))%mod, --d[0];
else insert(x), ++d[1];
}
else
{
if(d[1]) ans = (ans+find(x))%mod, --d[1];
else insert(x), ++d[0];
}
}
cout << ans << endl;
return 0;
}
提交记录