2023年6月3號(線段樹(3))

2022-08-05 09:48:20 字數 1486 閱讀 7348

現在請求你維護乙個數列,要求提供以下兩種操作:

1、 查詢操作。

語法:q l

功能:查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。

限制: ll 不超過當前數列的長度。 (l \ge 0)(l≥0)

2、 插入操作。

語法:a n

功能:將 n 加上 tt ,其中 tt 是最近一次查詢操作的答案(如果還未執行過查詢操作,則 t=0t=0 ),並將所得結果對乙個固定的常數 d取模,將所得答案插入到數列的末尾。

限制: n 是整數(可能為負數)並且在長整範圍內。

注意:初始時數列是空的,沒有乙個數。

輸入格式:

第一行兩個整數, mm 和 dd ,其中 mm 表示操作的個數 (m \le 200,000)(m≤200,000) , dd 如上文中所述,滿足 (0(0

接下來的 mm 行,每行乙個字串,描述乙個具體的操作。語法如上文所述。

輸出格式:

對於每乙個查詢操作,你應該按照順序依次輸出結果,每個結果佔一行。

輸入樣例#1: 複製

5 100
a 96

q 1a 97

q 1q 2

輸出樣例#1: 複製

96

9396

這道題想一下應該能想到線段樹,同時題目也很好理解:a帶個數字n:表示n加上之前的計算出的答案插入到樹中;

q帶個數字l表示將樹的末尾幾個取最大值輸出;看似(搜易賊)

對於大佬們都是簡單的,但是我為了這道題改了3個小時:

我只想分享自己易錯的地方:

1.錯誤

一開始過樣例,只得到這個答案:心態崩潰;

可是為什麼,我也不知道,最後找到老師,才搞清楚輸入問題:

錯誤輸入:

1 scanf("

%c%d

",&ch,&l);//輸入問題

2if(ch=='a'

) 3 add(1,++cnt,(l+ask(1,cnt-l+1,cnt))%m);

4else

5 printf("

%lld\n

",ask(1,cnt-l+1,cnt));

更改:

cin>>ch>>l;

if(ch=='a'

) add(

1,++cnt,(l+c)%n);

else

只是把scnaf改成cin得到:

舒服,但是不知道為什麼,也許只是個bug,求大佬指教!!!

2023年6月5號(離散化)

today,我們接觸了新的名詞 離散化,聽著就覺的高大尚 離散化是什麼,這個問題問得好 問度娘 離散化,把無限空間中有限的個體對映到有限的空間中去,以此提高演算法的時空效率。通俗的說,離散化是在不改變資料相對大小的條件下,對資料進行相應的縮小。例如 原資料 1,999,100000,15 處理後 1...

2023年 3月到2023年6月

這段時間在做乙個比較大的專案,工作量很大。總結一下吧。從2014年畢業到現在有3年多了,從android轉web端也有一段時間了。轉型的這段時間可以說挺痛苦的。剛開始還以為做web挺簡單的。但是到後面才發現事實並非如此。在這段時間踩了很多坑。1 做功能的時候忘了看設計原型跟需求文件,照著設計稿畫瓢,...

2023年3月9號 陰

心情 今天心情不太穩定,因為上班就幹活,朋友出了點事,我還惦記著和她聊聊,了解一下情況的進展。幹了半天,終於是搞定了,順便處理了乙個小問題。但是,我自己的電腦徹底費了,只有重灌系統了。晚上去上課也比較鬱悶,本來以為今天的課會有意思的,但是因為沒有預習好,我們班這些帥哥靚妹們基礎又特別好,結果第一章電...