3 4考試總結

2022-10-07 14:21:15 字數 3348 閱讀 1493

這場考試讓我意識到我的很多小毛病根本沒有改正

經驗教訓:

#define int long long

審題不仔細,時間短了以後心態不正

盲目做題,沒有在已有的性質上進一步考慮

\(sto~郭隊~orz\),場切t1

題目描述:小火車沉迷垃圾手遊不能自拔,他還在玩碧藍航線。

為了慶祝小火車打撈出了加賀赤城,他決定讓你搭建一座紀念塔群,紀念塔共有 \(n\) 個排成一排,第 \(i\) 個高度為 \(h_i\),也就是由 \(h_i\) 塊磚頭組成,你得一塊一塊磚頭搭建。每次你至多能攜帶 \(k\) 塊磚頭,由任意一座塔的底端開始,可以向上移動或者向左右兩座塔的同高度移動(前提是那些位置上有磚塊),也可以在那些位置擺上磚塊(即使是懸空的),並且一旦擺上磚塊你就得立刻移動過去。請問你最少需要多少次才能搭建完呢?

\(1 \le n \le 10^5\)

\(1\le a_i\le 10^9\)

我們考慮根據各個點建一棵笛卡爾樹,那麼我們後面可以直接在笛卡爾樹上遞迴處理這棵樹即可

inline void dfs(int x, int fa) 

}//統計答案

signed main() //建樹操作

rt = stk[1];

dfs(rt, 0);

write(ans), puts("");

return 0;

}

小火車沉迷垃圾手遊不能自拔,正在玩碧藍航線,可惜小火車的艦(lao)隊(po)練度太低打不過副本,所以他只好去刷其餘的副本來公升級。

總共有 \(n\) 個副本編號從 \(1\) 到 \(n\),每個副本有個難度值 \(a_i\),小火車每天按照順序刷連續的一段副本,第 \(j\) 天會刷的副本必須落在 \(l\) 到 \(r\) 之間。但是他是個很懶的人,每天一開始他的懶惰值為 \(0\),當他刷完乙個副本以後懶惰值就會異或上 \(a_i\),小火車希望懶惰值一直保持單調不下降,請問每天他都有多少種刷副本的方法?

題意說的很明確,那麼我們考慮,如果我們固定從乙個點開始往後進行異或,那麼一定是會有乙個最靠右的點,那麼就要考慮怎麼找到那個點。

\(zzz\) 講了個極端好的思路,即我們首先對於異或進行字首和操作,我們發現其實對於原式來說異或上乙個 \(a\),想要變小 當且僅當 最高位的值為1,卻同時另外乙個數的最高值也為1。因此,我們只關心 \(a\) 的最高位的一的位置,找一下它會使得哪個 \(b\) 變小

那麼我們記錄乙個東西就是我們對於 \(a_i\) 來說,在第 \(j\) 位曾經從 \(0\)->\(1\) 或者從 \(1\)->\(0\),我們記錄 \(f_\),0表示0變成了1,1表示1變成了0,這個操作使第 \(i\) 個數在第 \(j\) 位貢獻的(因為我們只考慮 \(a_i\) 的最高位即可)

inline int get(int x) 

rep (i, 1, n)

然後對於每一位,我們直接二分check我們到這一位,當前位置被變換了幾次,如果 1->0 大於 0 次,就說明這個位置的時候值變小了,考慮r = mid - 1,不然的話就令l=mid

這裡我們這麼寫

inline bool check(int l, int r) 

return true;

}inline int get_nxt(int x)

return res;

}

最後我們統計出所有答案以後,對於每乙個點建一棵支援區間加的主席樹,每次令 \(i\) 到 \(nxt_i\) 這個區間進行+1 即可,然後用 \(q\log n\) 的複雜度即可直接輸出答案

inline int len(int l, int r, int l, int r) 

inline void update(int &p, int pre, int l, int r, int l, int r)

tr[p].sum += len(l, r, l, r);

int mid = (l + r) >> 1;

if (l <= mid) update(tr[p].ls, tr[pre].ls, l, mid, l, r);

if (r > mid) update(tr[p].rs, tr[pre].rs, mid + 1, r, l, r);

}inline int query(int u, int v, int l, int r, int l, int r)

總複雜度為 \(n\log a_i \log n+q\log n\)

完整**再放一下

/*

blackpink is the revolution

light up the sky

blackpink in your area

*/int n, m, t, ans, f[2][n][32], cnt, l, r, res;

int a[n], sum[n], nxt[n], rt[n];

inline int get(int x)

inline bool check(int l, int r)

return true;

}struct node tr[n << 5];

inline int get_nxt(int x)

return res;

}inline int len(int l, int r, int l, int r)

inline void update(int &p, int pre, int l, int r, int l, int r)

tr[p].sum += len(l, r, l, r);

int mid = (l + r) >> 1;

if (l <= mid) update(tr[p].ls, tr[pre].ls, l, mid, l, r);

if (r > mid) update(tr[p].rs, tr[pre].rs, mid + 1, r, l, r);

}inline int query(int u, int v, int l, int r, int l, int r)

int main()

rep (i, 1, n)

nxt[i] = get_nxt(i);

rep (i, 1, n)

update(rt[i], rt[i - 1], 1, n, i, nxt[i]);

read(t);

while (t--)

return 0;

}//write:revolutionbp

3 4考試小記

又一次 上來之後讀了一下題,第一題像是一道fft,第二題第一反應想不到原始暴力,第三題沒看懂。於是開始先做第一題。第一題推了一下式子發現好像做過原題,就是bzoj4332分零食。再次確認了一下式子正確,理論複雜度o n logn logn 之後開始打碼,中途忘了一點細節,重新手推了一下式子。在開始乙...

考試總結 CQOI2017 考試總結

再奮鬥一年,爭取ak noip2016 cqoi2017 這是去年我立的flag。看考場,電腦挺快,而且配置和評測機一樣,可以放心的在自己的電腦上卡常測試啦,好評。碼了一道fft的題,沒網只好拷著回家交,鍵盤蜜汁小,enter佔據了兩行,旁邊還有關機按鈕。座位安排奧妙重重,和巴蜀dyf大神坐在一起。...

MBA考試總結

終於考完了 mba入學統考,兩年來參加了兩次,感覺還是挺辛苦和有壓力的。第一年沒有通過是因為之前了解太遲,大概準備了 20天左右,最後還是功成垂敗。09年其實也一直沒有心情複習的,逼到最後的 20天,狠了一把勁,還是狠狠的複習了幾天,貌似今年應該可以通過了。總結經驗如下 1 如果你決定去做一件事,請...