Cod sursa(job #1038488)

Utilizator thewildnathNathan Wildenberg thewildnath Data 21 noiembrie 2013 16:49:09
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 kb
#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;
}