Cod sursa(job #2031591)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 3 octombrie 2017 15:45:45
Problema Plantatie Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n,q,nr,pos;
int ox,oy,l;
int arbint[502][3002];
int max1,start,finish;
int maxim(int a, int b)
{
    if(a>b)
        return a;
    return b;
}
void update(int l, int nod, int st, int sf)
{
    if(st==sf){
        arbint[l][nod]=nr;
        return;
    }
    int m=(st+sf)/2;
    if(pos<=m)
        update(l,2*nod,st,m);
    else
        update(l,2*nod+1,m+1,sf);
    arbint[l][nod]=maxim(arbint[l][2*nod],arbint[l][2*nod+1]);
}
void query(int l,int nod,int st,int dr)
{
    if(start<=st && dr<=finish)
    {
        if(max1<arbint[l][nod])
            max1=arbint[l][nod];
        return;
    }
    int mij=(st+dr)/2;
    if(start<=mij)
        query(l,2*nod,st,mij);
    if(mij<finish)
        query(l,2*nod+1,mij+1,dr);
}
int main()
{
    f>>n>>q;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j){
            f>>nr;
            pos=j;
            update(i,1,1,n);
        }
    for(;q;--q)
    {
        f>>ox>>oy>>l;
        int mx=0;
        for(int i=ox;i<ox+l;++i)
         {
            max1=-1;
            start=oy;
            finish=oy+l-1;
            query(i,1,1,n);
            mx=max(mx,max1);
         }
        g<<mx<<'\n';
    }
    return 0;
}