Cod sursa(job #2402549)

Utilizator BungerNadejde George Bunger Data 10 aprilie 2019 19:45:35
Problema Plantatie Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
const int NMAX=500;
int n,m,q,x,y,k,v[NMAX*NMAX+5];
int RMQ[NMAX*NMAX+5][27];
void read()
{
    fin>>n>>m;
    for(int i=1;i<=n*n;i++) fin>>v[i];
}
void RMQConstruct()
{
    for(int i=1;i<=n*n;i++) RMQ[i][0]=i;
    for(int j=1;(1<<j)<=n*n;j++)
        for(int i=1;(1<<j)+i-1<=n*n;i++)
    {
            if(v[RMQ[i][j-1]] > v[RMQ[i+(1<<(j-1))][j-1]])   RMQ[i][j]=RMQ[i][j-1];
            else                                             RMQ[i][j]=RMQ[i+(1<<(j-1))][j-1];
    }
}
void ans()
{
    int maxim=INT_MIN;
        int L=k;
        int K=log2(L);
    int low=n*(x-1)+y;
    int high=low+k-1;
    for(int i=1;i<=k;i++)
    {
         //fout<<low<<" "<<high<<endl;
        maxim=max(maxim,max(v[RMQ[low][K]],v[RMQ[low+L-(1<<K)][K]]));
        low+=n;
        high=low+k-1;
    }
     fout<<maxim<<'\n';
    //fout<<endl<<endl;
}
int main()
{
    read();
    RMQConstruct();
    while(m--)
    {
        fin>>x>>y>>k;
        ans();
    }
    return 0;
}