題目鏈結
這題很多做法都可以過,這裡用的是離線 + 平衡樹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漂亮的狗狗餵食 好狠心的人啊 而且為了保證某乙隻狗...