luogu
求點數最多的四維偏序路徑
三維偏序可以直接第一層排序然後用\(\mathcal\)分治,轉化成二位偏序問題來做,呢麼四維偏序怎麼做呢
眾所周知,\(\mathcal\)
\(tree\)可以用來解決多維座標問題,且在隨機資料下複雜度很優秀,呢麼我們來用\(\mathcal\)
\(tree\)來解決這個問題。
還是和四維偏序一樣,先對第一位排序,我們用\(\mathcal\)
\(tree\)來維護三維的座標
對於顯然的\(dp\)方程我們有
\[dp_i = \max_ dp_j + 1
\]呢麼我們維護三維範圍內的最大值,每次查詢的範圍為\(x\in [-inf,x_i],y\in [-inf,y_i],z\in [-inf,z_i]\)內的最大值即可,然後每次結束之後插入節點,失衡時和替罪樣樹那樣重構\(\mathcal\)
\(tree\)即可
// author: ame__
#include#include#define _ 0
#define ame__debug
#define bomb exit(0)
#define log(fmt...) fprintf(stderr , fmt)
#define towa(fmt...) fprintf(stdout , fmt)
using namespace std;
/*grievous lady*/
typedef int32_t i32;
typedef int64_t i64;
typedef double qwq;
const int buf_size = 1 << 12;
char buf[buf_size] , *buf_s = buf , *buf_t = buf + 1;
#define ptr_next() \ \}
#define mians(_s_) \
\ (*_ptr_) = '\0'; \
}
template void mian(_n_ & _x_)
_x_ = 0; while(isdigit(*buf_s)) if(_nega_) _x_ = -_x_;
}
const i32 inf = 0x3f3f3f3f;
const i32 kato = 2e5 + 10;
template bool cmax(_n_ &a , const _n_ &b)
template bool cmin(_n_ &a , const _n_ &b)
i32 n , ans;
struct point
friend bool operator !=(const point &x , const point &y)
}f[kato] , h[kato];
inline bool cmp1(const point &x , const point &y)
inline bool cmp2(const point &x , const point &y)
inline bool c***(const point &x , const point &y)
struct node
friend bool operator <(const node &x , const node &y)
}g[kato];
namespace towa
node(const point &qaq): p(qaq)
inline void up1(node *x)
inline void up2()
}*root , _pool[kato] , *tail = _pool , *sta[kato];
i32 top , tot;
inline node *build(node *fa , i32 l , i32 r , i32 opt)
inline void del(node *&o)
inline void judge(node *&o , i32 opt)
inline void insert(node *&o , const point &a , i32 opt)else if(opt == 1)else
if(o -> ls) o -> up1(o -> ls);
if(o -> rs) o -> up1(o -> rs);
o -> up2();
judge(o , opt);
}inline i32 ask(node *o , i32 b1 , i32 b2 , i32 c1 , i32 c2 , i32 d1 , i32 d2)
}inline int ame_();
for(i32 i = 1;i <= n;i ++)
towa("%d\n" , ans);
#ifdef ame__time
log("time: %dms\n", int((clock() - nol_cl) / (qwq)clocks_per_sec * 1000));
#endif
return ~~(0^_^0); /*さようならプログラム*/
}
int ame__ = ame_();
int main()
\(\mathcal\)套\(\mathcal\),暫時鴿鴿鴿 題解 P1396 營救 C
原題傳送門 這道題目基本就是乙個克魯斯卡爾最小生成樹的模板題,唯一不同的是,這道題目的最終目標不是所有點相連,而是只要s和t相連就可以了。還有就是這道題目求的是最小生成樹中的最大邊權值。但是,克魯斯卡爾是從最小的邊權值開始考慮的,當s和t第一次連通時考慮的那條邊,就是當前考慮的最大的權值的邊,直接輸...
C 洛谷題解 P1425
題號 p1425 題名 小魚的游泳時間 題目 倫敦奧運會要到了,小魚在拼命練習游泳準備參加游泳比賽,可憐的小魚並不知道魚類是不能參加人類的奧運會的。這一天,小魚給自己的游泳時間做了精確的計時 本題中的計時都按24小時制計算 它發現自己從a時b分一直游泳到當天的c時d分,請你幫小魚計算一下,它這天一共...
P1657 選書洛谷c 題解
如果你覺得這篇文章對你有幫助的話,請點點大拇指哦 題目描述 學校放寒假時,資訊學奧賽輔導老師有1,2,3 x本書,要分給參加培訓的x個人,每人只能選一本書,但是每人有兩本喜歡的書。老師事先讓每個人將自己喜歡的書填寫在一張表上。然後根據他們填寫的表來分配書本,希望設計乙個程式幫助老師求出所有可能的分配...