P1533 可憐的狗狗

2022-03-04 08:22:05 字數 1784 閱讀 3032

小卡由於公務需要出差,將新家中的狗狗們託付給朋友嘉嘉,但是嘉嘉是乙個很懶的人,他才沒那麼多時間幫小卡餵狗狗。

小卡家有n隻狗,由於品種、年齡不同,每乙隻狗都有乙個不同的漂亮值。漂亮值與漂亮的程度成反比(漂亮值越低越漂亮),吃飯時,狗狗們會按順序站成一排等著主人給食物。

可是嘉嘉真的很懶,他才不肯喂這麼多狗呢,這多浪費時間啊,於是他每次就只給第i只到第j只狗中第k漂亮的狗狗餵食(好狠心的人啊)。而且為了保證某乙隻狗狗不會被喂太多次,他喂的每個區間(i,j)不互相包含。

輸入格式:

第一行輸入兩個數n,m,你可以假設n<300001 並且 m<50001;m表示他喂了m次。

第二行n個整數,表示第i只狗的漂亮值為ai。

接下來m行,每行3個整數i,j,k表示這次餵食喂第i到第j只狗中第k漂亮的狗的漂亮值。

輸出格式:

m行,每行乙個整數,表示每一次喂的那只狗漂亮值為多少。

輸入樣例#1:

7 2

1 5 2 6 3 7 4

1 5 3

2 7 1

輸出樣例#1:

3

2

solution:

本題我要吐槽洛谷資料~~

(我的鍋啊~~!我算錯複雜度了,我的這個方法複雜度是$o(nlogn)$,因為本題題面中說道區間互不包含)

碼了乙個莫隊+權值線段樹維護,時間複雜度$o(n\sqrtlogn)$(錯了,是$o(nlogn)$),結果$ac$還進了最優解第一頁。

首先就是常規的莫隊離線,記錄區間,排序。

對原數離散化,再構建權值線段樹,每次維護乙個數的增減,查詢整個區間第$k$大,記錄$ans$就$ok$了。

**:

#include#define il inline

#define ll long long

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

using

namespace

std;

const

int n=300005

;int tr[n<<2

],n,m,pos[n],a[n],ans[n];

struct

nodeq[n];

struct

numm

}nm[n];

il bool cmp(node a,node b)

il int

gi()

il void pushup(int rt)

il void update(int k,int c,int l,int r,int

rt) tr[rt]+=c;

int m=l+r>>1

;

if(k<=m)update(k,c,lson);

else

update(k,c,rson);

pushup(rt);

}il

int query(int k,int l,int r,int

rt)int

main()

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 可憐的狗狗 題解

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

洛谷 1533 可憐的狗狗

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