// zmiana czasu runda 1 A
#include <iostream>
#include<algorithm>
using namespace std;
long ileWydarzen;
long ileZapytan;
long wydarzeniaSuma[500000];
long wydarzeniaIloczyn[500000];
long zapytaniaIle[100000];
long zapytaniaOd[100000];
long zapytaniaDo[100000];
long tab[100001];
void zadzialaj(long wydarzenie, long zapytanie)
{
long ile;
if(wydarzenie == 0) ile = zapytaniaIle[wydarzenie];
else ile = tab[zapytanie];
long prawa = ile+wydarzeniaSuma[wydarzenie];
long lewa = ile * wydarzeniaIloczyn[wydarzenie];
long wynik;
if(lewa >prawa) wynik = lewa;
else wynik = prawa;
wynik = wynik % 1000000007;
tab[zapytanie] = wynik;
// cout << "wydarzenie = " << wydarzenie << " zapytanie = " <<zapytanie << " tab[zapytanie] = " << tab[zapytanie] << endl;
// cout << "wydarzenie = " << wydarzenie << " zapytania = " << tab[0] << ", " << tab[1] << endl;
}
void skopiuj (long wydarzenie, long zapytanie)
{
if(zapytanie >0)
tab[zapytanie] = tab[zapytanie-1];
}
int main()
{
long max=0;
cin >> ileWydarzen >> ileZapytan;
for(long i=0; i<ileWydarzen; ++i)
{
cin >> wydarzeniaSuma[i] >> wydarzeniaIloczyn[i];
}
for(long i=0; i<ileZapytan; ++i)
{
cin >> zapytaniaIle[i] >> zapytaniaOd[i] >> zapytaniaDo[i];
tab[i] = zapytaniaIle[i];
}
for(long i=0; i<ileWydarzen; ++i)
{
for(long j=0; j<ileZapytan; j++)
{
if(i>=zapytaniaOd[j] && i<zapytaniaDo[j])
{
zadzialaj(i, j);
}
// else skopiuj(i, j);
}
}
for(long i=0; i<ileZapytan; ++i)
{
cout << tab[ i ] << endl;
}
// cout.flush();
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | // zmiana czasu runda 1 A #include <iostream> #include<algorithm> using namespace std; long ileWydarzen; long ileZapytan; long wydarzeniaSuma[500000]; long wydarzeniaIloczyn[500000]; long zapytaniaIle[100000]; long zapytaniaOd[100000]; long zapytaniaDo[100000]; long tab[100001]; void zadzialaj(long wydarzenie, long zapytanie) { long ile; if(wydarzenie == 0) ile = zapytaniaIle[wydarzenie]; else ile = tab[zapytanie]; long prawa = ile+wydarzeniaSuma[wydarzenie]; long lewa = ile * wydarzeniaIloczyn[wydarzenie]; long wynik; if(lewa >prawa) wynik = lewa; else wynik = prawa; wynik = wynik % 1000000007; tab[zapytanie] = wynik; // cout << "wydarzenie = " << wydarzenie << " zapytanie = " <<zapytanie << " tab[zapytanie] = " << tab[zapytanie] << endl; // cout << "wydarzenie = " << wydarzenie << " zapytania = " << tab[0] << ", " << tab[1] << endl; } void skopiuj (long wydarzenie, long zapytanie) { if(zapytanie >0) tab[zapytanie] = tab[zapytanie-1]; } int main() { long max=0; cin >> ileWydarzen >> ileZapytan; for(long i=0; i<ileWydarzen; ++i) { cin >> wydarzeniaSuma[i] >> wydarzeniaIloczyn[i]; } for(long i=0; i<ileZapytan; ++i) { cin >> zapytaniaIle[i] >> zapytaniaOd[i] >> zapytaniaDo[i]; tab[i] = zapytaniaIle[i]; } for(long i=0; i<ileWydarzen; ++i) { for(long j=0; j<ileZapytan; j++) { if(i>=zapytaniaOd[j] && i<zapytaniaDo[j]) { zadzialaj(i, j); } // else skopiuj(i, j); } } for(long i=0; i<ileZapytan; ++i) { cout << tab[ i ] << endl; } // cout.flush(); return 0; } |
English