#include #include int main(int ac, char** av){ int rozmiarMacierzy = 0, rozmiarPowiekszonejMacierzy = 0,wartoscKomorki = 0, iloscNajwiekszychKlasAbstrakcji = 0; long long int iloscPodmacierzy = 0, podmacierzGornaGranica = 0, podmacierzDolnaGranica = 0, podmacierzLewaGranica = 0, podmacierzPrawaGranica = 0, sumaElementowPodmacierzy = 0, sumaWszystkichPodmacierzy = 0, maksymalnaWartosc = 0; std::map klasyAbstrakcji; fscanf(stdin, "%d", &rozmiarMacierzy); fscanf(stdin, "%d", &iloscPodmacierzy); rozmiarPowiekszonejMacierzy = rozmiarMacierzy + 1; int** macierzTablica = new int*[rozmiarPowiekszonejMacierzy]; macierzTablica[0] = new int[rozmiarPowiekszonejMacierzy]; macierzTablica[0][0] = 0; for(register int wierszMacierzy = 1; wierszMacierzy < rozmiarPowiekszonejMacierzy; ++wierszMacierzy){ macierzTablica[wierszMacierzy] = new int[rozmiarPowiekszonejMacierzy]; macierzTablica[wierszMacierzy][0] = macierzTablica[0][wierszMacierzy]= 0; for(register int kolumnaMacierzy = 1; kolumnaMacierzy < rozmiarPowiekszonejMacierzy; ++kolumnaMacierzy){ fscanf(stdin, "%d", &wartoscKomorki); macierzTablica[wierszMacierzy][kolumnaMacierzy] = macierzTablica[wierszMacierzy][kolumnaMacierzy-1] + macierzTablica[wierszMacierzy-1][kolumnaMacierzy] - macierzTablica[wierszMacierzy-1][kolumnaMacierzy-1] + wartoscKomorki; } } for(register int podmacierz = 0; podmacierz < iloscPodmacierzy; ++podmacierz){ fscanf(stdin, "%d", &podmacierzGornaGranica); fscanf(stdin, "%d", &podmacierzLewaGranica); fscanf(stdin, "%d", &podmacierzDolnaGranica); fscanf(stdin, "%d", &podmacierzPrawaGranica); sumaElementowPodmacierzy = macierzTablica[podmacierzDolnaGranica+1][podmacierzPrawaGranica+1] - macierzTablica[podmacierzDolnaGranica+1][podmacierzLewaGranica] - macierzTablica[podmacierzGornaGranica][podmacierzPrawaGranica+1] + macierzTablica[podmacierzGornaGranica][podmacierzLewaGranica]; klasyAbstrakcji[sumaElementowPodmacierzy] += 1; sumaWszystkichPodmacierzy += sumaElementowPodmacierzy; } for(std::map::iterator iterator=klasyAbstrakcji.begin(); iterator != klasyAbstrakcji.end(); ++iterator) if(iterator->second == maksymalnaWartosc) iloscNajwiekszychKlasAbstrakcji = iloscNajwiekszychKlasAbstrakcji + 1; else if(iterator->second > maksymalnaWartosc){ iloscNajwiekszychKlasAbstrakcji = 1; maksymalnaWartosc = iterator->second; } fprintf(stdout, "%d %d %lld", klasyAbstrakcji.size(), iloscNajwiekszychKlasAbstrakcji, sumaWszystkichPodmacierzy / iloscPodmacierzy); return 0; }