時間限制: 2 sec 記憶體限制: 32 mb
提交: 198 解決: 107
[提交][狀態][討論版][命題人:外部匯入]
食堂有n個打飯視窗,現在正到了午飯時間,每個視窗都排了很多的學生,而且每個視窗排隊的人數在不斷的變化。
現在問你第i個視窗到第j個視窗一共有多少人在排隊?
輸入的第一行是乙個整數t,表示有t組測試資料。
每組輸入的第一行是乙個正整數n(n<=30000),表示食堂有n個視窗。
接下來一行輸入n個正整數,第i個正整數ai表示第i個視窗最開始有ai個人排隊。(1<=ai<=50)
接下來每行有一條命令,命令有四種形式:
(1)add i j,i和j為正整數,表示第i個視窗增加j個人(j不超過30);
(2)sub i j,i和j為正整數,表示第i個視窗減少j個人(j不超過30);
(3)query i j,i和j為正整數,i<=j,表示詢問第i到第j個視窗的總人數;
(4)end 表示結束,這條命令在每組資料最後出現;
每組資料最多有40000條命令。
對於每組輸入,首先輸出樣例號,佔一行。
然後對於每個query詢問,輸出乙個整數,佔一行,表示詢問的段中的總人數,這個數保持在int以內。
1101 2 3 4 5 6 7 8 9 10
query 1 3
add 3 6
query 2 7
sub 10 2
add 6 3
query 3 10
end
case 1:63359
#includeusing namespace std;
int main(),w[310]=;
for(int i=1;i<=n;i++)
while(cin>>s)
else if(s=="sub")
else if(s=="query")
}else
cout<}
else break;
} }
return 0;
}
分塊 (查詢區間最小眾數
題目鏈結 1 include2 include3 include4 include5 include6 include 7 include8 include9 include10 include11 include12 include13 include14 include 15 include16...
整除分塊思想
對於求形如 sum lfloor frac rfloor 的值,就需要用到整除分塊,否則當n很大時就會超時。在普通的乙個乙個的計算時可以發現很多 lfloor frac rfloor 的值成塊狀分布,最終的到的規律是發現對於每乙個值相同的塊,它的最後乙個數就是n n i for int l 1,r ...
區間分塊系列
很好的分塊知識講解。可能涉及的幾個詞語解釋 區間 數列中連續一段的元素 區間操作 將某個區間 a,b 的所有元素進行某種改動的操作 塊 我們將數列劃分成若干個不相交的區間,每個區間稱為乙個塊 整塊 在乙個區間操作時,完整包含於區間的塊 不完整的塊 在乙個區間操作時,只有部分包含於區間的塊,即區間左右...