NOIP模擬 點名

2022-05-12 04:38:26 字數 3578 閱讀 2963

在 j 班的體育課上,同學們常常會遲到幾分鐘,但體育老師的點名卻一直很準時。老師只關心同學的身高,他會依次詢問當前最高的身高,次高的身高,第三高的身高,等等。在詢問的過程中,會不時地有人插進隊伍裡。你需要回答老師每次的詢問。第一行兩個整數 n m,表示先後有 n 個人進隊,老師詢問了 m 次第二行 n 個整數,第 i 個數 ai 表示第 i 個進入隊伍的同學的身高為 ai第三行 m 個整數,第 j 個數 bj 表示老師在第 bj 個同學進入隊伍後詢問第 j 高的人身高是多少。

40%的資料保證 n ≤ 1000

100%的資料保證 1 ≤ m ≤ n ≤ 30000; 0 ≤ ai < 232

資料真的太水了好吧

思路很多種,反正都是裸的資料結構。在此直接提供**,本人寫的對頂堆,值域線段樹本來是首選,但是還要離散化,懶。

**按一下順序給,感激貢獻**的julao同學們

對頂堆值域線段樹

樹狀陣列

可以當做各種模板題。。

#include

using

namespace

std;  

#define n 30030

#define rt register

#define ll long long

ll n,m,k,in,cnt1,cnt2,ans;  

ll a[n];  

priority_queueq1;  

priority_queue,greater>q2;   

template

<

class

t>  

inline

void

read(t &x)  

while

(ch>='0'&&ch<='9')  

x*=f;  

}  int

main()  

ll top=q1.top();  

if(a[in]>top)q2.push(a[in]),cnt2++;  

else

q1.push(a[in]),cnt1++;   

in++;     

}  while

(!q2.empty()&&cnt1

while

(!q1.empty()&&cnt1>i)  

ll top=q1.top();printf("%lld\n"

,top);   

}  return

0;  

}   

#include

#include

#include

#include

#include

using

namespace

std;  

#define re register int

#define rec(i,j,k) for(re i=(j);i<=(k);i++)

#define mem(s,k) memset(s,k,sizeof s)

#define lson t[u].l,l,mid

#define rson t[u].r,mid+1,r

typedef

long

long

ll;  

const

intmaxn=30000+1;  

ll a[maxn];  

struct

fil  

b[maxn];  

bool

operator <(

const

fil &x,

const

fil &y)  

}t[maxn*20];  

void

updata(

int&u,

intl,

intr,

intk)  

intquery(

intl,

intr,

intl,

intr,

intk)  

ll found(int

k)  

}  intmain()  

;  }  

sort(b+1,b+n+1);  

rank[b[1].num]=cnt=1;  

rec(i,1,n)  

if(b[i].val==b[i-1].val)rank[b[i].num]=cnt;  

else

rank[b[i].num]=++cnt;  

rec(i,1,n)  

intk,t;  

rec(i,1,m)  

return

0;  

}  #include 

#include 

using

namespace

std;  

typedef

long

long

lint;  

const

lint maxn = 3e4 + 7;  

lint n,m;  

lint a[maxn],b[maxn];  

bool

n[maxn];  

lint c[maxn];  //差分樹狀陣列 

struct

query  

}q[maxn];  

inline

lint lowbit(lint k)    

inline

void

update(lint p,lint x)  

inline

lint query(lint p)  

inline

void

dump(lint x)  

void

binary_search(lint l,lint r,lint p)  

else

if(query(mid) > q[p].q)  binary_search(l,mid - 1,p);  

else

binary_search(mid + 1,r,p);  

}  inline

bool

my_cmp(query a,query b)    

intmain()  

sort(b + 1,b + n + 1);  

for(

register

lint i = 1;i <= n;i++)  c[i] = lowbit(i);  

for(

register

lint j = 1;j <= m;j++)  

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

lint p = n;  

for(

register

lint i = m;i > 0;i--)  

binary_search(1,n,i);  

}  sort(q + 1,q + m + 1,my_cmp);  

for(lint i = 1;i <= m;i++)  printf(

"%lld\n"

,q[i].ans);  

return

0;  

}  

NOIP模擬 修路

這題第一眼看上去有些懵逼,還以為是dp。第二眼,哦,這麼裸的最小生成樹,2分鐘打完,拍都沒對,自信100分。最終100分。每條邊的權值減去連個節點的權值,所有的邊做一次最小生成樹就好了。include include include include include define fo i,a,b f...

NOIP模擬 項鍊

經過一番周折,bob找到了alice,為了安慰alice驚魂未定的心,bob決定給alice買一條手鍊,這條手鍊由m個珍珠組成,每個珍珠上刻著不同的小寫字母。當alice看到一些字母按照一定的順序排列成的字串時,就會產生一定的愉悅值。bob現在可以在這m個珍珠上刻上字母,現在他想知道,如何刻字母可以...

NOIP模擬 幻象

phantom是一位愛思考的哲 學家。最近phantom得到了森 妖精的真傳。在他練功的時候,每秒他的思緒中都有一定的概率浮現出奇 異的幻象,持續x秒的幻象將產生 空格 的幻象值。phantom練功發自真心,他想知道,在n秒內他期望產生的幻象值是多少。等我比賽完之後,我們才知道 空格 是x2 所以比...