Cod sursa(job #1556264)

Utilizator daneel95Holteiu Daniel-Ninel daneel95 Data 24 decembrie 2015 14:00:37
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
#include <set>
#define ll long long

using namespace std;

ifstream in("sdo.in");
ofstream out("sdo.out");

ll n,k,a[3000005];

multiset<ll> q;
multiset<ll,greater<ll> > p;

int main()
{
    ll i,mediana,inceput,sfarsit,min=0,sum;
    ll sumQ=0,sumP=0;
    in>>n>>k;
    for(i=1;i<=n;i++) in>>a[i];
    q.insert(a[1]);
    sumQ=a[1];
    for(i=2;i<=n;i++)
    {
        if(p.size()<q.size() && p.size()!=0)
        {
            p.insert(*q.begin());
            q.erase(*q.begin());

        }
        if(a[i]<*q.begin())
        {
            p.insert(a[i]);
        }else{
            q.insert(a[i]);
        }
    }
    if(p.size()<q.size() && p.size()!=0)
        {
            p.insert(*q.begin());
            q.erase(*q.begin());

        }

    for(i=1;i<=k;i++)
    {
        p.erase(a[i]);
        if(p.size()<q.size())
        {
            sumQ-=*q.begin();
            sumP+=*q.begin();
            p.insert(*q.begin());
            q.erase(*q.begin());
        }else if(q.size()+1<p.size()){
            sumP-=*p.begin();
            sumQ+=*p.begin();
            q.insert(*p.begin());
            p.erase(*p.begin());
        }
    }
    if(k%2==0) out<<*q.begin();
        else out<<*p.begin();
    in.close();
    out.close();
    return 0;
}