loj傳送門
考的時候打的大暴力,其實想到了lct,但是思路有點沒轉過來。就算想到了估計也不能切,我沒有在考場寫lct的自信。。。
其實這題不是讓你直接用lct維護答案,只是借用了lct的架構,讓權值相同的點在同一棵splay中,用一棵splay頂端的點的權值表示這棵splay中所有點的權值。發現從根到某個點的操作跟lct的access操作相似,可以把access操作魔改一下,一邊splay、跳父親,一邊更新樹狀陣列、統計答案。注意為了維護一棵splay的權值,rotate轉到根的時候要更新根的權值。
**非常簡短:
#include #include #include #define r register
#define i inline
#define l long long
#define b 1000000
using namespace std;
const int n = 100003;
char buf[b], *p1, *p2;
i char gc()
i int rd()
l o;
int a[n], c[n], b[n], v[n], n, t;
struct te[n];
i void mdf(int x, int k)
i int qry(int x)
i int nrt(int x)
i void upd(int x)
i void rtt(int x)
i void spl(int x)
upd(x);
}i void acc(int x)
int main()
換windows了,%i64d就懶得改了。 問題 B 道路建設 Ver I
題目描述 有n個村莊,編號從1到n,你應該建造一些道路,使每個村莊都可以相互連線。兩個村a和b是相連的,當且僅當a和b之間有一條道路,或者存在乙個村c使得在a和c之間有一條道路,並且c和b相連。現在一些村莊之間已經有一些道路,你的任務就是修建一些道路,使所有村莊都連通起來,並且所有道路的長度總和是最...
noip2018 鋪設道路
退役oier day1t1見ancestor 一道odt板子題都沒人寫?主要 考場 思路 從小到大解決深度 每次解決乙個深度,貢獻就是與上乙個深度之差乘上區間個數 之後就統統split 暴力列舉深度那裡珂以用hash優化暴列舉的常數,懶得搞 複雜度因為每次split會刪掉乙個點,所以是嚴格nlogn...
道路鋪設 NOIP2018
春春是一名道路工程師,負責鋪設一條長度為 n 的道路。鋪設道路的主要工作是填平下陷的地表。整段道路可以看作是 n 塊首尾相連的區 域,一開始,第 i 塊區域下陷的深度為 di 春春每天可以選擇一段連續區間 l,r 填充這段區間中的每塊區域,讓其下陷深 度減少 1。在選擇區間時,需要保證,區間內的每塊...