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

wiki1285

系統(tǒng) 3958 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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 白沙| 正安县| 民丰县| 青海省| 昌都县| 镶黄旗| 东至县| 宕昌县| 电白县| 德化县| 西藏| 湄潭县| 梧州市| 蒙城县| 察哈| 河南省| 靖远县| 济阳县| 马公市| 唐海县| 博兴县| 大丰市| 潮安县| 永仁县| 鸡泽县| 望都县| 灵璧县| 苏州市| 黎川县| 横峰县| 藁城市| 宁晋县| 景宁| 郴州市| 宁陵县| 溧水县| 金昌市| 岳西县| 河北区| 枣阳市| 巴彦淖尔市|