題目鏈結
題解:每次輸入如果都迴圈l到r去打標記打掃過教室的話,時間複雜度是n^2,肯定是會超時的。所以肯定有什麼技巧可以只在l,r處打標記,最後統計的時候能夠把l-r中間的統計上,因為以前學樹狀陣列的時候學到過一種叫延遲標記的操作,所以不難想到每次在用left和right陣列統計每個位置,區間左邊界和右邊界出現的次數,最後for一遍,當進入某個區間的時候,累積的左邊界數就要增加,一離開某個區間的時候,左邊界數就要減少,如果當前左邊界數大於0,說明肯定位於某個區間內部,否則要麼在區間邊界上,要麼完全沒有處在某個區間內部。
#include #include #include using namespace std;
const int maxn = 1e6+20;
int left[maxn];// 左邊界數量
int right[maxn];// 右邊界數量
int n,m;
int main()
int res = n;
int cnt = 0;
for(int i = 1;i <= n;i++)
printf("%d\n",res);
return 0;
}
備註:看了題解後發現還有種延遲標記的方法,大概是用個cnt陣列,每次l,r區間輸入的時候,cnt[l]++,cnt[r+1]--,然後for迴圈的時候每次都cnt[i] += cnt[i-1],這樣算出來的cnt[i]就是每個房間被打掃的次數,這個應該才是標準的延遲標記。
計蒜客 打掃教室 差分 字首和
一天蒜頭君被要求打掃 n 間連續的教室 編號從 1 到 n 但是蒜頭君打掃教室有點隨心,想打掃哪間教室就打掃哪間教室,導致最後自己都不知道是否所有的教室都打掃了。現在告訴你蒜頭君打掃了哪些教室,你能告訴蒜頭君他還有多少間教室沒有打掃嗎?第一行輸入兩個整數 n,m 分別表示教室的個數和蒜頭君打掃教室區...
計蒜客 2019計蒜之道D
題意 現在給定你乙個字串 s ss 以及乙個整數 k kk,請求出 s ss的字典序最小的長度為 k kk的子串行。資料範圍 0 s 5000000 00 s 5000 000 樣例輸入 helloworld 5樣例輸出 ellld思路 假如我們先不考慮長度為k的限制我們應當怎麼做?我們以樣例為例子...
計蒜客 解碼
蒜頭君自己發明了一種字串的編碼方式,對於只含有大小寫字母的字串,可以用數字來表示括號裡面的串連續出現的次數 數字有可能超過一位數 比如a abcd 2等價於aabcdabcd。特別地,如果數字前面沒有括號,表示緊貼數字的前面的 乙個字母 出現的次數。比如abc2表示abcc。為了降低解碼的難度,蒜頭...