CH128 Editor 題解報告

2022-04-28 20:30:14 字數 1403 閱讀 7152

題目傳送門

【題目大意】

【思路分析】

參考這道題

「對頂堆」的做法,我們可以用乙個類似的「對頂棧」做法。棧$a$記錄從序列開頭到游標位置的子串行,棧$b$記錄從游標後到序列結尾的子串行,兩個棧都以游標所在的一端為棧頂。因為第五種操作查詢的位置$k$不超過游標位置,所以我們用乙個陣列$sum$記錄棧$a$的字首和,$f$記錄字首和最大,對於每種操作如下處理:

1.「$i\ x$」操作:把$x$插入棧$a$,更新$sum$陣列和$f$陣列

2.「$d$」操作:把$a$的棧頂彈出

3.「$l$」操作:彈出$a$的棧頂,插入棧$b$

4.「$r$」操作:彈出$b$的棧頂,插入棧$a$,更新$sum$陣列和$f$陣列

5.「$q\ k$」操作:直接返回$f[k]$

彈出棧頂時要注意棧頂元素是否存在。

【**實現】

1 #include2 #include3 #include4 #include5 #include6

#define g() getchar()

7#define rg register

8#define go(i,a,b) for(rg int i=a;i<=b;i++)

9#define back(i,a,b) for(rg int i=a;i>=b;i--)

10#define db double

11#define ll long long

12#define il inline

13#define pf printf

14using

namespace

std;

15int

fr()

22while(ch>='

0'&&ch<='

9') w=(w<<1)+(w<<3)+ch-'

0',ch=g();

23return w*q;24}

25const

int n=1e6+2;26

inta[n],b[n],sum[n],f[n],q,ha,hb;

27int

main()

38if(type=='

d'&&ha>0) ha--;

39if(type=='

l'&&ha>0)43

if(type=='

r'&&hb>0)49

if(type=='q'

)53}54

return0;

55 }

**戳這裡

LeetCode每日一題 1 28

鏈結給定乙個整數型別的陣列 nums,請編寫乙個能夠返回陣列 中心索引 的方法。我們是這樣定義陣列 中心索引 的 陣列中心索引的左側所有元素相加的和等於右側所有元素相加的和。如果陣列不存在中心索引,那麼我們應該返回 1。如果陣列有多個中心索引,那麼我們應該返回最靠近左邊的那乙個。示例 1 輸入 nu...

leetcode刷題,總結,記錄,備忘 128

leetcode128longest consecutive sequence given an unsorted array of integers,find the length of the longest consecutive elements sequence.for example,g...

組合數(思維題 int128)

題意很簡單吧 就是算c n,k 和1e18的大小 如果你手寫一下就可以把c n,m 寫成 可以很明顯發現分子最左邊的n k可定小於分母最後邊的n k 1 所以他們能相同約分 然後就有乙個new知識點了!int128這個是只能在計算時使用的資料型別,不能在輸入輸出的時候使用 所以這道題我就可以這樣想 ...