題解 Luogu P1533 可憐的狗狗

2022-04-30 13:24:13 字數 1157 閱讀 1773

離線的題目,莫隊是不錯的解決方法

先把詢問排一下序

剩下就套乙個莫隊的板子

每來乙隻狗就把漂亮值插入平衡樹

每去掉乙隻狗就把漂亮值從平衡樹中刪掉

每次查詢查平衡樹中第k小

#pragma gcc optimize("o3")

#include #define n 800005

#define m 50005

using namespace std;

inline char nc()

inline int read()

while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=nc();

return x*f;

}inline void write(register int x)

struct splaytree[n];

int tot=0;

inline void update(register int x)

inline bool findd(register int x)

inline void connect(register int x,register int fa,register int son)

inline void rotate(register int x)

inline void splay(register int x,register int to) }

inline int newpoint(register int v,register int fa)

inline void insert(register int x)

else

int nxt=x1)

else

else

}}inline int arank(register int x)

if(xb.r);

}int main(); }

sort(q+1,q+m+1,cmp);

int l=1,r=0;

for(register int i=1;i<=m;++i)

for(register int i=1;i<=m;++i)

write(ans[i]),puts("");

return 0;

}

洛谷 P1533 可憐的狗狗 題解

題目鏈結 這題很多做法都可以過,這裡用的是離線 平衡樹treap 題目中 給出的區間不互相包含,是離線操作的乙個重要條件 我們將給出的區間按左端點從小到大排序,當左端點相同時,按右端點從小到大排序,滿足區間訪問的元素位置遞增 如果有區間互相包含就無法實現 對於每乙個區間 li ri l i,r i ...

洛谷 1533 可憐的狗狗

小卡家有n隻狗,由於品種 年齡不同,每乙隻狗都有乙個不同的漂亮值。漂亮值與漂亮的程度成反比 漂亮值越低越漂亮 吃飯時,狗狗們會按順序站成一排等著主人給食物。可是嘉嘉真的很懶,他才不肯喂這麼多狗呢,這多浪費時間啊,於是他每次就只給第i只到第j只狗中第k漂亮的狗狗餵食 好狠心的人啊 而且為了保證某乙隻狗...

P1533 可憐的狗狗

終於做了乙個簡單題,233 先對區間拍個序 因為他說所有區間互不包含 所以排序之後可以雙指標l,r指呀指 容易得到 這樣每個值最多插入刪除一邊 一次操作logn 總複雜度nlogn include define for i,a,b for int i a i b i using namespace ...