Pagini recente » Cod sursa (job #1846169) | Cod sursa (job #170576) | Cod sursa (job #1649833) | Cod sursa (job #329824) | Cod sursa (job #1038488)
#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std;
int v[30003],u[30003],aux[30003],nr;
struct cmpm
{
bool operator()(const int &a,const int &b)const
{
return a>b;
}
};
struct cmpM
{
bool operator()(const int &a,const int &b)const
{
return a<b;
}
};
priority_queue <int,vector<int> ,cmpm> qm;
priority_queue <int,vector<int> ,cmpM> qM;
inline void querymin(int nr)
{
int i;
for(i=1;i<nr;++i)
{
aux[i]=qm.top();
qm.pop();
}
printf("%d",qm.top());
for(i=1;i<nr;++i)
qm.push(aux[i]);
}
inline void querymax(int nr)
{
int i;
for(i=1;i<nr;++i)
{
aux[i]=qM.top();
qM.pop();
}
printf("%d",qM.top());
for(i=1;i<nr;++i)
qM.push(aux[i]);
}
int main()
{
freopen("date.in","r",stdin);
freopen("date.out","w",stdout);
int t,n,m,i,j;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
scanf("%d",&v[i]);
for(i=1;i<=m;++i)
scanf("%d",&u[i]);
sort(u+1,u+1+m);
j=1;nr=0;
for(i=1;i<=n;++i)
{
while(u[j]==i-1)
{
++nr;
if(nr>=i/1)
querymin(nr);
else
querymax(i-nr);
if(j<m)
printf("\n");
++j;
}
qm.push(v[i]);
qM.push(v[i]);
}
while(u[j]==i-1)
{
if(nr>=i/1)
querymin(nr);
else
querymax(i-nr);
if(j<m)
printf("\n");
++j;
}
while(!qm.empty())
qm.pop();
while(!qM.empty())
qM.pop();
if(t)
printf("\n\n");
}
return 0;
}