Cod sursa(job #1049015)

Utilizator Catalina_BrinzaBrinza Catalina Catalina_Brinza Data 6 decembrie 2013 19:12:52
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
//
//  main.cpp
//  rmq
//
//  Created by Catalina Brinza on 12/2/13.
//  Copyright (c) 2013 Catalina Brinza. All rights reserved.
//

#include <fstream>
#include <math.h>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int maxim(int x,int y,int z,int q)
{
    if (x<q) x=q;

    if (x<y) x=y;
    if (x<z) x=z;
 
    return x;
    
}



int main()
{int rmq[00][500][10];

    int n,i,x,m,y,l,ji,z,h;
    f>>n>>m;
    for(i=0;i<n;++i)
        for (ji=0;ji<n;++ji)
        f>>rmq[i][ji][0];
   
    for (l=1;(1<<l)<=n;++l)
    {
      
        h=1<<(l-1);
        for (i=0;i<n;++i)
           for (ji=0;ji<n;++ji)
        
            if (i+(h<<1)>n || ji+(h<<1)>n) rmq[i][ji][l]=0;
            else
            rmq[i][ji][l]=maxim(rmq[i][ji][l-1],rmq[i][ji+h][l-1],rmq[i+h][ji][l-1],rmq[i+h][ji+h][l-1]);
       
        }

    for (i=0;i<m;++i)
    {
        f>>x>>y>>z;
        x--;y--;
       int l=log2(z);
        x=maxim(rmq[x][y][l],rmq[x+z-(1<<l)][y][l],rmq[x][y+z-(1<<l)][l],rmq[x+z-(1<<l)][y+z-(1<<l)][l]);
   
           
       g<<x<<"\n";
    }

    return 0;
}