timelimit: 1s
memerylimit: 256m
天空於我過於寬闊,時光於我過於短暫。妲麗安是一位愛讀書的哥特裝蘿莉。她的某個書架上有\(n\)本書,一開始她記住了這\(n\)本書中所有的內容,但是如果她有一天沒重溫一本書的話,她就會忘記這本書內容的\(\frac\),也就是說\(k\)天之後她就會把這本書的內容完全忘記。如果她某天重溫這本書,那麼她又會記住這本書的全部內容。在無知中空虛,連匯集的話語,都在黃土中朽去。
——《丹特麗安的書架》
她現在正忙於閱讀其他書架上的書,因此每天只能閱讀這\(n\)本書中的一本,或是查詢從第\(l\)本書到第\(r\)本書中有多少書的內容她已經全部忘記了(但是這天並不會看這\(n\)本書)。
第一行有三個整數\(n,k,m(1\le n,k,m \le 10^5)\),表示這個暑假上書的數量、需要多少天忘記一本書的內容、詢問的天數。
接下來\(m\)行,每行第乙個整數是\(p(p\in\ )\),
如果\(p=1\),那麼後面有乙個整數\(x(1\le x\le n)\),表示這一天妲麗安重溫了第\(x\)本書;
如果\(p=2\),那麼後面跟兩個整數\(l,r(1\le l \le r \le n)\),表示妲麗安想知道從\(l\)到\(r\)有多少本書她已經全部忘光了。
輸出\(m\)行。如果這一天妲麗安閱讀了書籍,請輸出這本書在閱讀前她還記內容的\(k\)分之多少;如果這一天妲麗安在詢問,那麼請輸出詢問的結果。
5 3 5
1 12 1 4
1 32 1 5
1 3200
41每本書記住的內容:
天數\書的編號12
3450
3333
312$\to$322
2222
1111
3100$\to$300
4002
0050
01$\to$300
你需要知道的知識:
1.樹狀陣列(對於有n個元素的陣列,可以在o(log(n))次計算內獲得任意[l,r]區間的和 )
2.佇列(一種資料結構,特性是先進先出)
如果一本書完全忘記,則將它設為1,否則設為0;可以用樹狀陣列查詢區間[l,r]中1的書的個數。
用乙個last陣列記錄每本書最近一次被閱讀是在哪一天;設定乙個長為k的佇列q,記錄最近k天閱讀了哪本書(如果某一天沒有閱讀,則設為閱讀了第n+1本書);用cnt陣列記錄一本書在q**現了幾次。用這三個輔助陣列就可以實現對樹狀陣列的修改。
#includeusing namespace std;
const int n=1e5+10;
int n, m, k;
int a[n], cnt[n], last[n];
queueq;
int lowbit(int x)
void updata(int w, int x)
int query(int w)
int main()
//input
scanf("%d", &p);
if(p==1)else
}}
一共14個測試點,前10個完全隨機,11/12每天都讀,13/14每天都詢問。
資料生成**:
#includeusing namespace std;
mt19937 rnd(time(0));
const int n=1e5;
typedef tupletiii;
file *fw;
int n, k, m;
tiii data[n+10];
void fun1()
//output
fprintf(fw, "%d %d %d\n", n, k, m);
for(int i=1, p, l, r; i<=m; ++i)
} int main()
}
csuoj 給自己出題的小X
小x學習了dfs,為了練習搜尋,開始給自己出題玩。玩著玩著,一會把自己難住了,一會又被自己難倒了,真是有趣誒!小x出的題 現在有n個不同的正整數,求它們可以組成多少個這樣的集合,滿足 第一行,乙個正整數t t 20 表示資料組數。對於每組資料,有兩行。第一行為乙個正整數n 3 n 25 第二行為n個...
matplotlib,numpy自己動手安裝
最近想用python做些機器學習方面的事情,就買了本 機器學習實戰 研究,peter harrington編寫的,人民郵電出版社出版,2013年6月上市的。是本很新的書。首先第一件事情是配置學習環境,我個人的筆記本上安裝了pythonxy,什麼工具都安裝好了,很省心。我也想在實驗室的電腦上安裝配置好...
CSU1973 給自己出題的小X
本題本意是搜尋題,直接小優化剪枝裸搜即可,然而可以dp,看了石文斌的題解,設f i j k 為前i個數,選出j個,相差大於k的方案數,先預處理 f i 1 k 1 f i j k f l j 1 k 之和 a i a l k,a陣列先預處理成從小到大排序的序列 序列順序不影響方案數的 然後統計f i...