Cod sursa(job #1556254)

Utilizator daneel95Holteiu Daniel-Ninel daneel95 Data 24 decembrie 2015 13:48:14
Problema Statistici de ordine Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 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]);
        }
    }
    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());
        }
    }
    mediana=*p.begin();
    out<<mediana;
    in.close();
    out.close();
    return 0;
}