在 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 所以比...