佇列 排序(送禮物)

2022-06-09 03:21:09 字數 2015 閱讀 6119

阿麗莎公主邀請她的朋友們參加她的生日聚會。她的每個朋友都會帶來價值v的禮物,而他們所有的禮物都會在不同的時間出現。由於大廳不夠大,因此alisha一次只能容納幾個人。她決定讓具有最**值的禮物的人首先進入。

每次alisha開啟門時,她都可以決定讓p個人進入她的城堡。如果大廳中的人數少於p,則所有人員都會進入。在她所有的朋友都到達之後,阿里沙(alisha)將再次開啟門,這次,每個尚未進入的朋友都會進入。

如果有兩個朋友帶來了相同價值的禮物,那麼最先出現的那個應該首先進入。給定乙個查詢n,請告訴alisha誰是進入城堡的第n個人。

輸入項輸入的第一行給出測試用例的數量t,其中1≤t≤15。

在每個測試用例中,第一行包含三個數字k,m和q,並用空格分隔。 k是她邀請的朋友數,其中1≤k≤150,000。在所有alisha的朋友到達0≤m≤k之前,門會開啟m次。 alisha將有q個查詢,其中1≤q≤100。

接下來的k行中的第i行給出了乙個字串bi,該字串由不超過200個英文本元組成,並且整數vi(1≤vi≤108)用空格分隔。 bi是參加alisha派對的第i個人的名字,bi帶來了價值vi的禮物。

接下來的m行中的每行包含兩個整數t(1≤t≤k)和p(0≤p≤k),中間用空格分隔。第t個人到達後,門將開啟,alisha將讓p個朋友進入她的城堡。

每個測試用例的最後一行將包含q個數字n1,…,nq,以空格分隔,這意味著alisha想要知道誰是進入她城堡的第n1,...,nq個朋友。

注意:最多將有兩個包含n> 10000的測試用例。

輸出量對於每個測試用例,輸出對應的alisha查詢名稱,並用空格分隔。

1

5 2 3

sorey 3

rose 3

maltran 3

lailah 5

mikleo 6

1 14 2

1 2 3

output

sorey lailah rose

source

2015 acm/icpc asia regional changchun online

就是排序

#pragma gcc optimize(2)#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;

inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}const

int maxn=2e5+110

;struct

node

else

}}a[maxn];

node now;

intmm[maxn];

struct

node1aa[maxn];

bool

cmp(node1 x,node1 y)

intp[maxn];

intz[maxn];

intmain()

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

sort(aa+1,aa+m+1

,cmp);

int cnt=1

;

int top=1

;

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

while(aa[i].rs&&!q1.empty())

}while(cnt<=n)

while(!q1.empty())

intl;

for(int i=0;i)

if(t>=1

) cout

<}

}

送禮物 題解

這道題目是到毒瘤題。首先我們至少去l個,所以我們可以把小於l的用單調佇列直接求出。對取l r個。顯而易見的是左右兩端必分別是這個區間的最小值和最大值。我們可以用01分數規劃。不放令結果最後為ans,則有 a j ans j a i ans i ans k 所以我們就可以愉快地分數規劃啦。includ...

swift送禮物動畫

最近做了乙個用swift寫的送禮動畫,這個動畫本來是在專案中用到的,然後專案改了需求用不上了就想到用swift封裝一下以後如果用得到可以借鑑下。想看下效果圖 思路 1.首先建立乙個動畫的資料model。struct animationmodel iflet giftname dict giftnam...

送禮物 雙向dfs

思路 dfs 先把a陣列排序,由大變小 dfs出前n 2 2 可以湊出的數,放到陣列s中 把s陣列去重排序,行成乙個單調遞增序列 再dfs剩下的數 可以組成的數,每組成乙個,二分找s陣列匹配的最大值 include includeusing namespace std typedef long lo...