#include <iostream>
#include <vector>
using namespace std;
const long long MODULO = 1000000007;
void czytaj(vector<vector<long long >> *A, vector<vector<long long >> *B, int n, int q) {
for(int i = 0; i < n; i++) {
vector<long long > a;
for(int j = 0; j < 2; j++) {
long long pom;
scanf("%lld", &pom);
a.push_back(pom);
}
A->push_back(a);
}
for(int i = 0; i < q; i++) {
vector<long long > a;
for(int j = 0; j < 3; j++) {
long long pom;
scanf("%lld", &pom);
a.push_back(pom);
}
B->push_back(a);
}
}
long long maxLiczba(vector<vector<long long >> zdarzenie, long long x, int l, int r) {
int maxI=l;
for(int i = l; i < r; i++) {
if(x<MODULO) {
if(x + zdarzenie[i][0] > x * zdarzenie[i][1]) {
x += zdarzenie[i][0];
maxI++;
}
else {
x *= zdarzenie[i][1];
maxI++;
}
}
else if(x>=MODULO)
i=r;
}
x=x%MODULO;
for(int i = maxI; i < r; i++) {
if(zdarzenie[i][1]>1) {
x*=zdarzenie[i][1];
}
else {
x+=zdarzenie[i][0];
}
if(x>=MODULO)
x=x%MODULO;
}
return x;
}
void rozwiaz(vector<vector<long long >> zdarzenie, vector<vector<long long >> zapytanie, int q) {
for(int i = 0; i < q; i++)
printf("%lld\n", maxLiczba(zdarzenie, zapytanie[i][0], zapytanie[i][1], zapytanie[i][2]));
}
int main() {
int n, q;
scanf("%d%d", &n, &q);
vector<vector<long long >> zdarzenie;
vector<vector<long long >> zapytanie;
czytaj(&zdarzenie, &zapytanie, n, q);
rozwiaz(zdarzenie, zapytanie, q);
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 | #include <iostream> #include <vector> using namespace std; const long long MODULO = 1000000007; void czytaj(vector<vector<long long >> *A, vector<vector<long long >> *B, int n, int q) { for(int i = 0; i < n; i++) { vector<long long > a; for(int j = 0; j < 2; j++) { long long pom; scanf("%lld", &pom); a.push_back(pom); } A->push_back(a); } for(int i = 0; i < q; i++) { vector<long long > a; for(int j = 0; j < 3; j++) { long long pom; scanf("%lld", &pom); a.push_back(pom); } B->push_back(a); } } long long maxLiczba(vector<vector<long long >> zdarzenie, long long x, int l, int r) { int maxI=l; for(int i = l; i < r; i++) { if(x<MODULO) { if(x + zdarzenie[i][0] > x * zdarzenie[i][1]) { x += zdarzenie[i][0]; maxI++; } else { x *= zdarzenie[i][1]; maxI++; } } else if(x>=MODULO) i=r; } x=x%MODULO; for(int i = maxI; i < r; i++) { if(zdarzenie[i][1]>1) { x*=zdarzenie[i][1]; } else { x+=zdarzenie[i][0]; } if(x>=MODULO) x=x%MODULO; } return x; } void rozwiaz(vector<vector<long long >> zdarzenie, vector<vector<long long >> zapytanie, int q) { for(int i = 0; i < q; i++) printf("%lld\n", maxLiczba(zdarzenie, zapytanie[i][0], zapytanie[i][1], zapytanie[i][2])); } int main() { int n, q; scanf("%d%d", &n, &q); vector<vector<long long >> zdarzenie; vector<vector<long long >> zapytanie; czytaj(&zdarzenie, &zapytanie, n, q); rozwiaz(zdarzenie, zapytanie, q); return 0; } |
English