樹狀陣列 賞花 nkoj2387

2021-08-19 18:38:06 字數 1309 閱讀 3191

詢問[l,r]元素種類數

帶標記的樹狀陣列

把顏色轉化為0/1標記(記錄下next和first/last,然後每個fisrt對應的值置1,l移動的時候就把l對應的地方置0,next[l]對應的值置1)

然後求字首和(樹狀陣列)即是種類數

//

// created by rv on 2018/4/23.

//#include

#include

const

int buffer_size = 10

<< 20;

char buffer[buffer_size];

char* ptr = buffer;

const

int n = 100000 + 5;

const

int m = 200000 + 5;

int c[n], next[n], first[n], qlast[n], qnext[m], r[m], ans[m];

struct bit

void add(int pos, int delta)

}int sum(int pos)

return res;

}};inline

void read_int(int& x)

while (*ptr >= '0' && *ptr <= '9')

}int main()

read_int(m);

for (int i = 1; i <= m; i++)

for (int i = n; i >= 1; i--)

for (int i = 1; i <= c; i++)

}// for (int i = 1; i <= m; i++)

for (l = 1; l <= n; l++)

bit.add(l, -1);

if (next[l] > 0)

}for (int i = 1; i <= m; i++)

return

0;}

壞習慣:

每次都忘記賦初值,每次都沒有處理邊界情況,寫的每乙個字元都沒有考慮,範圍沒有搞清楚就寫下去了,小問題很多(以後要做到寫完每一句話就把這句話靜態除錯一遍)

執行時間0ms原理:

使用stdio.h和fread讀入即可大幅度提公升速度,然後就幾乎測不出執行時間(windows的最小執行時間片是15ms)

fread讀入優化:

fread(readbuffer, 1, max_buffer_size, stdin);

樹狀陣列2

1157 新年彩燈 time limit 1 sec memory limit 128 mb submit 73 solved 25 submit status web board description 新年將至,yy準備掛一片彩燈,形狀呈矩形,已知彩燈剛掛完的彩燈共有n n盞 第一排編號為 1,...

樹狀陣列2 更高深的樹狀陣列

一 區間修改區間求和 這個東西可就不是把 單點查詢區間修改 和 單點修改區間查詢 合起來那麼簡單了,仔細想想,拿之前的辦法都不咋地好做,那麼怎麼辦呢,我們還是要用到差分陣列,設原陣列為a,差分陣列為b,則b 1 a 1 b i a i a i 1 那麼區間修改我們就解決了,只需要log的時間即可,但...

樹狀陣列模板2

如題,已知乙個數列,你需要進行下面兩種操作 1.將某區間每乙個數數加上x 2.求出某乙個數的和 輸入輸出格式 輸入格式 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含2或4個整數,表示乙個操作...