#include <cstdio> #include <iostream>using namespace Std;int shu[80004][2],n,size,root,kind,zhi[80004], Fa[80004],sum=0;int b1,b2;void Xuan (int a1) {int a2,a3,l,r;a2=fa[a1];a3=fa[a2];if (SHU[A2][0]==A1) L=0;else l=1;r=l^1; if (a2==root) Root=a1;else if (SHU[A3][0]==A2) shu[a3][0]=a1; else Shu[a3][1]=a1;fa[a1]=a3;fa[a2]=a1;shu[a2][l]=shu[a1][r];fa[shu[a1][r]]=a2;shu[a1][r]=a2;return;} void Zhuan (int a1) {int y,z;for (; a1!=root;) {Y=FA[A1]; Z=fa[y]; if (Y!=root) if ((SHU[Y][0]==A1) ^ (shu[z][0]==y)) Xuan (A1); Else Xuan (y); Xuan (A1);}} void cha (int &a1,int a2,int A3) {if (a1==0) {size++; A1=size; ZHI[A1]=A2; FA[A1]=A3; Zhuan (A1); Return }if (a2<zhi[a1]) cha (shu[a1][0],a2,a1); else cha (shu[a1][1],a2,a1); return;} void Qian (int a1,int A2) {if (a1==0) return;if (ZHI[A1]<=A2) {b1=a1; Qian (SHU[A1][1],A2); }else Qian (shu[a1][0],a2); return;} void Hou (int a1,int A2) {if (a1==0) return;if (ZHI[A1]>=A2) {b2=a1; Hou (SHU[A1][0],A2); }elSe hou (SHU[A1][1],A2);} void del (int A1) {zhuan (A1); if (shu[a1][0]*shu[a1][1]==0) root=shu[a1][0]+shu[a1][1];else {int k=shu[a1][1]; while (Shu[k][0]) k=shu[k][0]; SHU[K][0]=SHU[A1][0]; Fa[shu[a1][0]]=k; ROOT=SHU[A1][1];} Fa[root]=0;return; }int Main () {scanf ("%d", &n), for (int i=0;i<n;i++) {int a1,a2; scanf ("%d%d", &A1,&A2); if (!root) kind=a1; if (kind==a1) cha (root,a2,0); else {b1=-1;b2=-1; Qian (ROOT,A2); Hou (ROOT,A2); if (b1==-1) {sum+=zhi[b2]-a2; sum%=1000000; Del (B2); } else if (b2==-1) {SUM+=A2-ZHI[B1]; Sum%=1000000;del (B1); } else if (A2-ZHI[B1]<=ZHI[B2]-A2) {SUM+=A2-ZHI[B1]; sum%=1000000; Del (B1); }else {sum+=zhi[b2]-a2; sum%=1000000; Del (B2); }}}printf ("%d", sum); return 0;}
Splay Tree 1285 Pet Adoption Institute