題解 P3769 CH弱省胡策R2 TATT

2022-05-07 17:33:07 字數 2684 閱讀 9658

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個人,每人只能選一本書,但是每人有兩本喜歡的書。老師事先讓每個人將自己喜歡的書填寫在一張表上。然後根據他們填寫的表來分配書本,希望設計乙個程式幫助老師求出所有可能的分配...