日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

wiki1285

系統 4357 0

2013-09-21 16:50

      //
      
        By BLADEVIL 


      
      
        var
      
      
        

    n                       :longint;

    i                       :longint;

    x, y                    :longint;

    t, tot                  :longint;

    key, s, left, right     :
      
      
        array
      
      [
      
        0
      
      ..
      
        100010
      
      ] 
      
        of
      
      
         longint;

    ft                      :longint;

    a, b                    :longint;

    ans                     :longint;




      
      
        procedure
      
       right_rotate(
      
        var
      
      
         t:longint);


      
      
        var
      
      
        

    k                       :longint;


      
      
        begin
      
      
        

    k:
      
      =
      
        left[t];

    left[t]:
      
      =
      
        right[k];

    right[k]:
      
      =
      
        t;

    s[k]:
      
      =
      
        s[t];

    s[t]:
      
      =s[left[t]]+s[right[t]]+
      
        1
      
      
        ;

    t:
      
      =
      
        k;


      
      
        end
      
      
        ;




      
      
        procedure
      
       left_rotate(
      
        var
      
      
         t:longint);


      
      
        var
      
      
        

    k                       :longint;


      
      
        begin
      
      
        

    k:
      
      =
      
        right[t];

    right[t]:
      
      =
      
        left[k];

    left[k]:
      
      =
      
        t;

    s[k]:
      
      =
      
        s[t];

    s[t]:
      
      =s[left[t]]+s[right[t]]+
      
        1
      
      
        ;

    t:
      
      =
      
        k;


      
      
        end
      
      
        ;




      
      
        procedure
      
       maintain(
      
        var
      
      
         t:longint;flag:boolean);


      
      
        begin
      
      
        if
      
      
        not
      
       flag 
      
        then
      
      
        if
      
       s[left[left[t]]]>s[right[t]] 
      
        then
      
      
        

            right_rotate(t) 
      
      
        else
      
      
        if
      
       s[right[left[t]]]>s[right[t]] 
      
        then
      
      
        begin
      
      
        

                left_rotate(left[t]);

                right_rotate(t);

            
      
      
        end
      
      
        else
      
      
         exit

    
      
      
        else
      
      
        if
      
       s[right[right[t]]]>s[left[t]] 
      
        then
      
      
        

            left_rotate(t) 
      
      
        else
      
      
        if
      
       s[left[right[t]]]>s[left[t]] 
      
        then
      
      
        begin
      
      
        

                right_rotate(right[t]);

                left_rotate(t);

            
      
      
        end
      
      
        else
      
      
         exit;

    maintain(left[t],false);

    maintain(right[t],true);

    maintain(t,true);

    maintain(t,false);


      
      
        end
      
      
        ;




      
      
        procedure
      
       insert(
      
        var
      
      
         t:longint; v:longint);


      
      
        begin
      
      
        if
      
       t=
      
        0
      
      
        then
      
      
        begin
      
      
        

        inc(tot);

        t:
      
      =
      
        tot;

        key[t]:
      
      =
      
        v;

        s[t]:
      
      =
      
        1
      
      
        ;

        left[t]:
      
      =
      
        0
      
      
        ;

        right[t]:
      
      =
      
        0
      
      
        ;

    
      
      
        end
      
      
        else
      
      
        begin
      
      
        

        inc(s[t]);

        
      
      
        if
      
       v<key[t] 
      
        then
      
       insert(left[t],v) 
      
        else
      
      
         insert(right[t],v);

        maintain(t,v
      
      >=
      
        key[t]);

    
      
      
        end
      
      
        ;


      
      
        end
      
      
        ;




      
      
        function
      
       delete(
      
        var
      
      
         t:longint; v:longint):longint;


      
      
        begin
      
      
        

    dec(s[t]);

    
      
      
        if
      
       (v=key[t]) 
      
        or
      
       (v<key[t]) 
      
        and
      
       (left[t]=
      
        0
      
      ) 
      
        or
      
       (v>key[t]) 
      
        and
      
       (right[t]=
      
        0
      
      ) 
      
        then
      
      
        begin
      
      
        

        delete:
      
      =
      
        key[t];

        
      
      
        if
      
       (left[t]=
      
        0
      
      ) 
      
        or
      
       (right[t]=
      
        0
      
      ) 
      
        then
      
      
        

            t:
      
      =left[t]+right[t] 
      
        else
      
      
        

            key[t]:
      
      =delete(left[t],key[t]+
      
        1
      
      
        );

    
      
      
        end
      
      
        else
      
      
        if
      
       v<key[t] 
      
        then
      
       delete:=delete(left[t],v) 
      
        else
      
       delete:=
      
        delete(right[t],v);


      
      
        end
      
      
        ;




      
      
        function
      
       pre(
      
        var
      
      
         t:longint; v:longint):longint;


      
      
        begin
      
      
        if
      
       t=
      
        0
      
      
        then
      
       exit(-
      
        1
      
      
        );

    
      
      
        if
      
       v<key[t] 
      
        then
      
       pre:=pre(left[t],v) 
      
        else
      
      
        begin
      
      
        

        pre:
      
      =
      
        pre(right[t],v);

        
      
      
        if
      
       pre=-
      
        1
      
      
        then
      
       pre:=
      
        key[t];

    
      
      
        end
      
      
        ;


      
      
        end
      
      
        ;




      
      
        function
      
       succ(
      
        var
      
      
         t:longint; v:longint):longint;


      
      
        begin
      
      
        if
      
       t=
      
        0
      
      
        then
      
       exit(-
      
        1
      
      
        );

    
      
      
        if
      
       key[t]<=v 
      
        then
      
       succ:=succ(right[t],v) 
      
        else
      
      
        begin
      
      
        

        succ:
      
      =
      
        succ(left[t],v);

        
      
      
        if
      
       succ=-
      
        1
      
      
        then
      
       succ:=
      
        key[t];

    
      
      
        end
      
      
        ;


      
      
        end
      
      
        ;






      
      
        begin
      
      
        

    read(n);

    ans:
      
      =
      
        0
      
      
        ;

    t:
      
      =
      
        0
      
      ; tot:=
      
        0
      
      ; s[t]:=
      
        0
      
      
        ;



    
      
      
        for
      
       i:=
      
        1
      
      
        to
      
       n 
      
        do
      
      
        begin
      
      
        

        read(x,y);

        
      
      
        if
      
       x=ft 
      
        then
      
       insert(t,y) 
      
        else
      
      
        if
      
       s[t]=
      
        0
      
      
        then
      
      
        begin
      
      
        

                ft:
      
      =
      
        x;

                insert(t,y);

            
      
      
        end
      
      
        else
      
      
        begin
      
      
        

                a:
      
      =pre(t,y); b:=
      
        succ(t,y);

                
      
      
        if
      
       a=-
      
        1
      
      
        then
      
       a:=-maxlongint 
      
        div
      
      
        10
      
      
        ;

                
      
      
        if
      
       b=-
      
        1
      
      
        then
      
       b:=maxlongint 
      
        div
      
      
        10
      
      
        ;

                
      
      
        if
      
       abs(b-y)<abs(y-a) 
      
        then
      
      
        begin
      
      
        

                    ans:
      
      =(ans+abs(b-y)) 
      
        mod
      
      
        1000000
      
      
        ;

                    b:
      
      =
      
        delete(t,b);

                
      
      
        end
      
      
        else
      
      
        begin
      
      
        

                    ans:
      
      =(ans+abs(y-a)) 
      
        mod
      
      
        1000000
      
      
        ;

                    a:
      
      =
      
        delete(t,a);

                
      
      
        end
      
      
        ;

            
      
      
        end
      
      
        ;

    
      
      
        end
      
      
        ;

    writeln(ans);




      
      
        end
      
      .
    

?

wiki1285


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 江永县| 柘荣县| 济阳县| 宜昌市| 嘉义县| 和静县| 长泰县| 定陶县| 自治县| 江山市| 洛阳市| 敦煌市| 独山县| 长乐市| 赞皇县| 金溪县| 利辛县| 神木县| 永城市| 班玛县| 安阳县| 习水县| 锡林郭勒盟| 吉林省| 永城市| 长寿区| 安宁市| 边坝县| 镇巴县| 三台县| 田阳县| 察雅县| 甘洛县| 昆明市| 会昌县| 白沙| 白朗县| 南安市| 晋中市| 昆明市| 吉安市|