#include <bits/stdc++.h>
using namespace std;
const int N=2e5;
int n,m,CQR[N],RQC[N],i=1;
priority_queue<int> X;
priority_queue<int,vector<int>,greater<int> > Y;
void cqr(int &x){
if(X.size()==0){
X.push(x);
return;
}
if(X.size()==i){
if(X.top()>x){
Y.push(X.top());
X.pop();
X.push(x);
}else{
Y.push(x);
}
}else{
if(Y.size()==0){
X.push(x);
return;
}
if(Y.top()<x){
X.push(Y.top());
Y.pop();
Y.push(x);
}else{
X.push(x);
}
}
return;
}
void rqc(){
X.push(Y.top());
Y.pop();
}
int main(){
scanf("%d%d",&n,&m);
for(int k=1;k<=n;k++)scanf("%d",&CQR[k]);
for(int k=1;k<=m;k++)scanf("%d",&RQC[k]);
bool x=1;
for(int k=1;k<=n&&x;k++){
cqr(CQR[k]);
while(k==RQC[i]){
printf("%d\n",X.top());
if(RQC[i]==RQC[i+1])rqc();
i++;
if(i==m+1)x=0;
}
}
return 0;
}
不要在意我的代码为什么那么怪异,从之前的题Ctrl+C下来的
#include <bits/stdc++.h>
using namespace std;
const int N=2e5;
int n,m,CQR[N+5],RQC[N+5],i=1;
priority_queue<int> X;
priority_queue<int,vector<int>,greater<int> > Y;
void cqr(int &x){
if(X.size()==0){
X.push(x);
return;
}
if(X.size()==i){
if(X.top()>x){
Y.push(X.top());
X.pop();
X.push(x);
}else{
Y.push(x);
}
}else{
if(Y.size()==0){
X.push(x);
return;
}
if(Y.top()<x){
X.push(Y.top());
Y.pop();
Y.push(x);
}else{
X.push(x);
}
}
return;
}
void rqc(){
X.push(Y.top());
Y.pop();
}
int main(){
scanf("%d%d",&n,&m);
for(int k=1;k<=n;k++)scanf("%d",&CQR[k]);
for(int k=1;k<=m;k++)scanf("%d",&RQC[k]);
bool x=1;
for(int k=1;k<=n&&x;k++){
cqr(CQR[k]);
while(k==RQC[i]){
printf("%d\n",X.top());
if(RQC[i]==RQC[i+1])rqc();
i++;
if(i==m+1)x=0;
}
}
return 0;
}
看出差别没有?
CQR[N],RQC[N]
CQR[N+5],RQC[N+5]
az...雀噬狃臂 不过我不李姐,这不是RE吗,肾么时候变为TLE了?
为了这个我在时间上废了不少苦工,没想到是数组大小开错了
有没有哪位dalao蚌我说明一下,以免lg故技重施Orz