日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高级打字机【主席树】【滚动数组】【块状链表】

發布時間:2025/5/22 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高级打字机【主席树】【滚动数组】【块状链表】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目大意:
一個計算機支持一下三中操作:
TT xx:在文章末尾打下一個小寫字母xx
UU xx:撤銷最后的xx次修改操作。
QQ xx:詢問當前文章中第xx個字母并輸出。
InputInput

7 T a T b T c Q 2 U 2 T c Q 2

OutputOutput

b c

思路:
IOI題目。。。
正解是主席樹(當然啦什么TrieTrie+倍增法尋祖,可持久化跳表,可持久化塊狀數組無敵的東西都可以做)。
但是本蒟蒻是用滾動數組水過了這道題。


本題有三個階段:

  • 對于5050%的數據 n100000n≤100000;保證UU操作不會撤銷UU操作.
  • 對于100100%的數據 n100000n≤100000UU操作可以撤銷UU操作。
  • IOIIOI挑戰:必須使用在線算法完成該題。
  • 階段33就直接放棄了 畢竟我還不會主席樹。
    那么對于階段11,我們只要模擬堆,就可以很簡單地得到這部分分。

    vartail,n,i,j,x:longint;c:array[1..100000] of char; //模擬堆ch,orz:char; beginreadln(n);for i:=1 to n dobeginread(ch,orz);if ch='T' then //插入begininc(tail); readln(c[tail]); //放入堆頂end;if ch='Q' then //詢問beginreadln(x);writeln(c[x]); //輸出第i位end;if ch='U' then //刪除beginreadln(x);dec(tail,x) //將最后x位輸出end;end; end.

    對于階段二,我們也要把它分為兩部分。
    我們可以開一個長度為100000100000ansistringansistring數組sss[i]s[i]表示第ii種情況。再開一個sumsum,表示第幾種情況。這樣,當我們遇到UU操作時,把前面xx個操作還原,其實就是不做前xx個操作,直接賦值為s[sum-x-1]。這樣可以得到90分。

    varsum,n,i,j,x:longint;s:array[1..100000] of ansistring;ch,orz:char; beginreadln(n);for i:=1 to n dobeginread(ch,orz);if ch='T' thenbeginreadln(ch);inc(sum);s[sum]:=s[sum-1]+ch; //儲存情況end;if ch='Q' thenbeginreadln(x);writeln(s[sum][x]); //輸出現在的情況的第x位end;if ch='U' thenbeginreadln(x);inc(sum); //也算一種情況s[sum]:=s[sum-1-x]; //直接取第sum-1-x位end;end; end.

    但是這樣會MLE,ss數組開的太大了。所以我們要用滾動數組來優化。每次將sumsum%2000020000就可以了。


    代碼:

    const k=20000; //滾動數組,其他與90分代碼一樣。 varsum,n,i,j,x:longint;s:array[1..k] of ansistring;ch,orz:char; beginreadln(n);for i:=1 to n dobeginread(ch,orz);if ch='T' thenbeginreadln(ch);inc(sum);s[sum mod k]:=s[(sum-1)mod k]+ch;end;if ch='Q' thenbeginreadln(x);writeln(s[sum mod k][x]);end;if ch='U' thenbeginreadln(x);inc(sum);s[sum mod k]:=s[(sum-1-x) mod k];end;end; end.

    轉載于:https://www.cnblogs.com/hello-tomorrow/p/9313035.html

    總結

    以上是生活随笔為你收集整理的高级打字机【主席树】【滚动数组】【块状链表】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。