Cod sursa(job #2540055)

Utilizator alex2209alexPavel Alexandru alex2209alex Data 6 februarie 2020 18:04:46
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.68 kb
#include <bits/stdc++.h>
//#define f cin
//#define g cout

using namespace std;
ifstream f("a.in");
ofstream g("a.out");
//-----------------------------
///Globale
int n,m,q;
struct
{
    int val,last_day_update,upd_nr;
} heap[101][200001];
//-----------------------------
///Functii
void citire();
void rezolvare();
void afisare();
//-----------------------------
int main()
{
    citire();
    rezolvare();
    afisare();
    return 0;
}
//-----------------------------
void afisare()
{

}
//-----------------------------
void update(int poz,int val,int last_day_update,int upd_nr)
{
    nr[poz]++;
    heap[poz][nr[poz]].val = val;
    heap[poz][nr[poz]].last_day_update = last_day_update;
    heap[poz][nr[poz]].upd_nr = upd_nr;
    int p = nr[poz];
    while(p > 1 && putere(poz,day - heap[poz][p].last_day_update,heap[poz][p].val) > heap[poz][p / 2].val / putere(poz,day - heap[poz][p / 2].last_day_update,heap[poz][p / 2].val))
    {
        swap(heap[poz][p],heap[poz][p / 2]);
        p /= 2;
    }
}
//-----------------------------
void rezolvare()
{
    for(day = 1; day <= m; ++day)
    {
        ma = 0;
        for(int i = 1; i <= 100; ++i)
        {
            while(heap[i][1].upd_nr != upd[i])
                sterge(i);
            if(nr[i] >= 1)
                ma = max(ma,heap[i].val / putere(i,day - heap[i][1].last_day_update,heap[i][1].val));
        }
        g << ma;
    }
}
//-----------------------------
void citire()
{
    f >> n >> m >> q;
    for(int i = 1; i <= n; ++i)
        f >> v[i];
    day = 1;
    for(int i = 1; i <= n; ++i)
    {
        f >> d;
        update(d,v[i],1,1);
        upd[i] = 1;
    }
}