「joisc 2016 day 3」迴轉壽司
這題我無力吐槽了...
強烈譴責出題人用腳造資料
其實這題主要還是部分分啟發正解吧。看到有個\(s_i = 1, t_i= n\)的做法就是維護乙個堆就可以了,所以擴充套件下就是分塊,然後每個塊維護乙個堆。散塊暴力,大塊直接查。但是有個很坑爹的問題在於,對於整塊的部分我們沒辦法去修改,這個就很難受了。如果不去修改,在查詢這個塊為零散塊的時候就沒法暴力了。這也是我考試的時候的瓶頸。所以我這裡覺得題解還是很妙的。把每一次修改的標記打在塊上,對每個塊開個\(vector\)維護這個塊上的標記。在需要對這個塊暴力的時候就進行下傳。下傳的時候也是從左到右從小到大更新就做完了。本來我看前方大佬被卡常數,我就寫了帶刪除的堆,沒想到這個地方要構造小根堆又把我玩炸了。於是看看標程,發現這個寫法還挺香的
#include #include #include #include #include #include using namespace std;
#define r register
#define ll long long
const int inf = 0x3f3f3f3f;
const int n = 4e5 + 10;
const int b = 800 + 5;
inline int read()
int n, q, siz;
int whi[n], a[n];
priority_queueq[b];
vectortag[b];
inline void build(int id)
inline void debug()
}inline void init()
inline void rebuild(int id)
} build(id);
tag[id].clear();
}inline int oper(int id, int p)
inline int ask(int s, int t, int p)
return p;
}inline void solve() }}
int main()
題解 JOISC 2016 Day 3 電報
題目傳送門 給出乙個 n 個點 n 條邊的圖,每個點有且僅有乙個出邊,改變每條邊都會有對應的花費。求最小的花費使得整個圖強連通。很顯然,最後的圖就是乙個環。那我們要求的答案實際上就是鏈的最大權值之和。我們再次將問題轉換,發現就是每個點只保留一條邊,而保留的邊就是連向它的邊權最大的邊。但是我們發現這實...
BJOI2016 迴轉壽司
題目鏈結 給定乙個長度為 n 的序列 a 和乙個區間 l,r 求多少連續子串行的權值和在區間內,即滿足 1 le i le j le n 且滿足 l le sum a i le r 的方案數。區間和,很容易想到用字首和轉換,這樣區間相關變成了兩個點。設 s 為 a 的字首和,那麼統計就變成了這樣。統...
BJOI2016 迴轉壽司
似乎沒有人打平衡樹的題解,那我就來水一發 我們將題目做乙個簡單的轉化 設 sum i sum a j 那麼答案就是 sum sum l leq sum i sum leq r 我們可以利用容斥的思想進行簡單是轉化 sum sum l leq sum i sum sum sum r sum i sum...