這場考試讓我意識到我的很多小毛病根本沒有改正
經驗教訓:
#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 如果你決定去做一件事,請...