Mai intai trebuie sa te autentifici.

Cod sursa(job #1936147)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 22 martie 2017 21:22:41
Problema Rubarba Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <fstream>

using namespace std;
long n,m,q,i,j,k,x,nr,l[805],c[805],v[805][805],w[20][100005];
char ch;
void urca(long a)
{
    long p=0;
    while(p<=k)
    {
        w[p][a]++;
        a=(a+1)/2;
        p++;
    }
}
void scade(long a)
{
    long p=0;
    while(p<=k)
    {
        w[p][a]--;
        a=(a+1)/2;
        p++;
    }
}
long poz(long a)
{
    long p=k,y=1;
    while(p>0)
    {
        p--;
        y=y*2-1;
        if(a>w[p][y])
        {
            a-=w[p][y];
            y++;
        }
    }
    return y;
}
int main()
{
    ifstream f("amedie.in");
    ofstream g("amedie.out");
    f>>n>>m>>q;
    k=18;
    for(i=1; i<=n; i++)
    {
        l[i]=1;
        for(j=1; j<=m; j++)
        {
            f>>v[i][j];
            urca(v[i][j]);
            nr++;
        }
    }
    for(i=1; i<=m; i++) c[i]=1;
    for(i=1; i<=q; i++)
    {
        f>>ch;
        if(ch=='L')
        {
            f>>x;
            if(l[x])
            {
                l[x]=0;
                for(j=1; j<=m; j++)
                {
                    if(c[j])
                    {
                        scade(v[x][j]);
                        nr--;
                    }
                }
            }
        }
        else if(ch=='C')
        {
            f>>x;
            if(c[x])
            {
                c[x]=0;
                for(j=1; j<=n; j++)
                {
                    if(l[j])
                    {
                        scade(v[j][x]);
                        nr--;
                    }
                }
            }
        }
        else
        {
            if(nr%2) g<<poz(nr/2+1)<<'\n';
            else g<<poz(nr/2)<<'\n';
        }
    }
    f.close(); g.close();
    return 0;
}