Cod sursa(job #2070634)

Utilizator AndaionicaIonica Anda Maria Andaionica Data 19 noiembrie 2017 19:29:32
Problema Teren Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("z.in");
ofstream g("z.out");
struct zparcurgere
{
    int l,c;
}v[1001];
int cmp(zparcurgere x,zparcurgere y)
{
    if(x.l<y.l)
        return 1;
    if(x.l==y.l&&x.c<y.c)
        return 1;
    return 0;
}
int n,k,i,nr,sol[1001];
void z(int L,int x1,int y1)
{
    if(L==1)
    {
        nr++;
        int st=1;
        int dr=k;
        int mij;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(v[mij].l==x1&&v[mij].c==y1)
                break;
            if(v[mij].l>x1||(v[mij].l==x1&&v[mij].c>y1))
                dr=mij-1;
                else
                    st=mij+1;
        }
        if(v[mij].l==x1&&v[mij].c==y1)
            sol[mij]=nr;
    }
        else
        {
            int x2=x1;
            int y2=y1+L/2;
            int x3=x1+L/2;
            int y3=y1;
            int x4=x1+L/2;
            int y4=y1+L/2;
            z(L/2,x1,y1);
            z(L/2,x2,y2);
            z(L/2,x3,y3);
            z(L/2,x4,y4);
        }
}
int main()
{
    f>>n>>k;
    n=1<<n;
    for(i=1;i<=k;i++)
        f>>v[i].l>>v[i].c;
    sort(v+1,v+k+1,cmp);
    z(n,1,1);
    for(i=1;i<=k;i++)
        g<<sol[i]<<'\n';
    return 0;
}