nk 中學組織同學們去五雲山寨參加社會實踐活動,按慣例要乘坐火車去。由於 nk 中學的學生很多,在火車開之前必須清點好人數。
初始時,火車上沒有學生。當同學們開始上火車時,年級主任從第一節車廂出發走到最後一節車廂,每節車廂隨時都有可能有同學上下。年級主任走到第 m 節車廂時,他想知道前 m 節車廂上一共有多少學生,但是他沒有調頭往回走的習慣。也就是說每次當他提問時,m 總會比前一次大。
第一行兩個整數 n,k,表示火車共有 n 節車廂以及 k 個事件。
接下來有 k 行,按時間先後給出 k 個事件,每行開頭都有乙個字母 a,b 或 c。
如果字母為 a,接下來是乙個數 m,表示年級主任現在在第 m 節車廂;
如果字母為 b,接下來是兩個數 m,p,表示在第 m 節車廂有 p 名學生上車;
如果字母為 c,接下來是兩個數 m,p,表示在第 m 節車廂有 p 名學生下車。
學生總人數不會超過 105 。
對於每個 a ,輸出一行,乙個整數,表示年級主任的問題的答案。
10 7
a 1b 1 1
b 3 1
b 4 1
a 2a 3
a 10
012
3
對於 30% 的資料,1≤n,k≤104 ,至少有 3000 個 a;
對於 100% 的資料,1≤n≤5×105,1≤k≤105 ,至少有 3×104 個 a。
裸的樹狀陣列,讀資料時cin鐵定超時,換用scanf問題就來了,用getchar()讀回車不知為何會錯,看到別人的部落格,讀字元是scanf(" %c",&op);這樣的,前面多乙個空格,也能解決換行符問題,記一下.
#include
using
namespace std;
const
int maxn =
1e6+5;
int n,k,sum[maxn]
;void
add(
int p,
int x)
intask
(int p)
intmain()
else
if(op==
'b')
else
if(op==
'c')
}return0;
}
Github 的清點物件演算法
日期 2015年9月30日 github 的清點物件演算法 阮一峰的網路日誌 使用 github 的時候,你有沒有見過下面的提示?這段提示說,遠端 庫一共有4350078個物件需要轉殖。這就叫 清點物件 counting objects github需要實時計算出來,需要轉殖的物件總數。這個過程非常...
問題 D 清點人數
題目描述 nk中學組織同學們去五雲山寨參加社會實踐活動,按慣例要乘坐火車去。由於nk中學的學生很多,在火車開之前必須清點好人數。初始時,火車上沒有學生。當同學們開始上火車時,年級主任從第一節車廂出發走到最後一節車廂,每節車廂隨時都有可能有同學上下。年級主任走到第m節車廂時,他想知道前m節車廂上一共有...
SUOI 37 清點更多船隻
經典問題 正常解法是樹狀陣列或線段樹 但這題記憶體給的很小 分塊可以省記憶體 我們分析一下 樹狀陣列 線段樹分塊 時間 nlogn 20 times 10 6 nlogn 20 times 10 6 n sqrt n 10 3 times 10 6 記憶體 2 times n 2 times 8 t...