洛谷 P1533 可憐的狗狗 題解

2021-10-05 21:28:30 字數 1819 閱讀 4816

題目鏈結

這題很多做法都可以過,這裡用的是離線 + 平衡樹treap

題目中:給出的區間不互相包含,是離線操作的乙個重要條件

我們將給出的區間按左端點從小到大排序,當左端點相同時,按右端點從小到大排序,滿足區間訪問的元素位置遞增(如果有區間互相包含就無法實現)

對於每乙個區間 [li

,ri]

[l_i,r_i]

[li​,r

i​],我們將當前平衡樹維護的區間的左右端點進行調整,同時進行插入與刪除操作

整體來說並不難

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn=

300000+10

,inf=

0x3f3f3f3f

;struct node_node[maxn]

;struct seqg[maxn]

;int n,m,root,nodecnt;

int a[maxn]

,ans[maxn]

;inline

bool

cmp(seq x,seq y)

inline

intread()

while

(ch>=

'0'&& ch<=

'9')s=

(s<<3)

+(s<<1)

+(ch^48)

,ch=

getchar()

;return s*w;

}inline

void

push_up

(int

&x)void

zag(

int&x)

void

zig(

int&x)

void

ins(

int&x,

const

int k)++s

(x);if(

v(x)

>k)

else

}void

del(

int&x,

const

int k)if(

p(ls(x)

)rs(x)))

zig(x)

,del

(x,k)

;else

zag(x)

,del

(x,k)

;return;}

--s(x);if(

v(x)

>k)

del(

ls(x)

,k);

else

del(

rs(x)

,k);

}int

find

(int k)

return0;

}int

main()

sort

(g+1

,g+1

+m,cmp)

;int l=g[1]

.l,r=g[1]

.l;--r;

for(

int i=

1;i<=m;

++i)

for(

int i=

1;i<=m;

++i)

printf

("%d\n"

,ans[i]);

return0;

}

P1533 可憐的狗狗

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

P1533 可憐的狗狗

小卡由於公務需要出差,將新家中的狗狗們託付給朋友嘉嘉,但是嘉嘉是乙個很懶的人,他才沒那麼多時間幫小卡餵狗狗。小卡家有n隻狗,由於品種 年齡不同,每乙隻狗都有乙個不同的漂亮值。漂亮值與漂亮的程度成反比 漂亮值越低越漂亮 吃飯時,狗狗們會按順序站成一排等著主人給食物。可是嘉嘉真的很懶,他才不肯喂這麼多狗...

洛谷 1533 可憐的狗狗

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