題目傳送
學習的這篇題解。
結論:1.直觀感受一下會發現找到lis,lis裡的東西相對位置是不會變的,其他的移一移總會排序成功的,所以其他的就是最小集合了,第一問的答案就是n-lis;
2.尋找字典序第k小的集合,相當於是尋找字典序第k大的lis,然後把這個lis刪去,就是第二問的答案集合。
前置技能:
樹狀陣列,及樹狀陣列求lis。
解決方法(請先看**):
1.樹狀陣列bit[i]求lis的同時再維護一下「以比i大的數字為開頭、這個lis長度下的序列的數量」。數量超過maxk的時候min一下砍掉(是一種常見手法),因為多了也沒有用它只會詢問maxk以內的,否則有可能爆longlong。
2.用vector存下每個長度的lis是以哪些位置為起點,然後按長度從大到小列舉,看看第k個是哪個lis,標記這些數字。因為之前維護了數量,所以這時就不用從1開始乙個乙個列舉到k了,一下砍下去一段。
1#pragma comment(linker, "/stack:1024000000,1024000000")
2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include
13 #include 14 #include 15 #include 16 #include
17 #include 18 #include 19 #include 20 #include 21 #include 22
#define init(a, b) memset(a, b, sizeof(a))
23#define rep(i, a, b) for (int i = a; i <= b; i++)
24#define irep(i, a, b) for (int i = a; i >= b; i--)
25using
namespace
std;
2627 typedef double
db;28 typedef long
long
ll;29 typedef unsigned long
long
ull;
30 typedef pairp;
31const
int inf = 0x3f3f3f3f;32
const ll inf =1e18;
3334 template void read(t &x)
4344 template void
write(t x)
4950 template void
writeln(t x)
5455
const
int maxn = 1e5 + 5;56
const ll maxk =1e18;
5758
intn, a[maxn];
59ll k;
60struct
arr
66 arr(int
a, ll b)
69}dp[maxn], bit[maxn];
70 vectorv[maxn];
71bool
mark[maxn];
7273
void modify(arr &a, arr b)
79 a.cnt = min(maxk, a.cnt +b.cnt);80}
8182
void update(int
x, arr val)
8687 arr query(int
x) 93
94int
main()
103104
int lis = query(1
).len;
105for (int i = lis, pos = 1; i; --i) else
117}
118}
119120 writeln(n -lis);
121 rep(i, 1
, n)
125return0;
126 }
BZOJ1052 BZOJ3760 覆蓋問題
原題位址 先說自己的逗比方法 二分答案,把所有點用乙個最小的矩形 框 起來,易證矩形的其中乙個端點是最優解中正方形的乙個端點,然後列舉四個端點後遞迴處理,差不多了 然後 olz黃學長的o n 做法 ac code include include include using namespace std...
動態點分治 bzoj 3730,bzoj 1095
總結一下動態點分治的模板。對於乙個樹,把它點分的同時記錄每個點的所有父親 logn個 並記錄點距其父親的距離。具體實現就是dfs的時候fa x dep x u,dis x dep x d bzoj1095 您需要寫乙個程式支援反轉點的顏色,求距離最遠的黑色點對的距離。解析 在每個點u存乙個堆st記錄...
福慧雙修 探險 BZOJ4398 BZOJ2407
分析 雙倍經驗 資料範圍不同 我們考慮,我們必定是從1走一條邊到節點i,之後從i到j跑最短路,之後再從j到1走另一條邊的情況下,不會重複,並且是答案。那麼我們考慮預處理出pre i 表示從1走到i滿足最短路的並且經過pre i pre i 為路徑第二個節點。那麼,針對每乙個邊,x,y,z,v 滿足當...