#include "bits/stdc++.h"
using namespace std;
struct node {
long long add;
long long mult;
long long threshold;
};
const long long OVERFLOW_THRESHOLD = 1000000007;
const long long MOD_VAL = 1000000007;
long long calc(long long x, node data) {
if(x <= data.threshold) {
return x + data.add;
}
return x * data.mult;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long n, q;
long long x, l, r;
bool overflow = false;
vector<node> nodes;
cin>>n>>q;
for(int i=0; i<n; i++) {
node data;
cin >> data.add >> data.mult;
if(data.mult > 1) {
data.threshold = data.add / (data.mult - 1);
} else {
data.threshold = 0;
}
nodes.push_back(data);
}
for(int i=0; i<q; i++) {
cin>> x >> l >> r;
long long x_val = x;
overflow = false;
for(int j=l; j<r; j++) {
if(overflow) {
if(nodes[j].mult > 1) {
x = (x * nodes[j].mult) % MOD_VAL;
} else {
x = (x + nodes[j].add) % MOD_VAL;
}
} else {
x_val = calc(x_val, nodes[j]);
if(x_val >= OVERFLOW_THRESHOLD) {
overflow = true;
x = x_val % MOD_VAL;
} else {
x = x_val;
}
}
}
cout<< x << '\n';
}
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 | #include "bits/stdc++.h" using namespace std; struct node { long long add; long long mult; long long threshold; }; const long long OVERFLOW_THRESHOLD = 1000000007; const long long MOD_VAL = 1000000007; long long calc(long long x, node data) { if(x <= data.threshold) { return x + data.add; } return x * data.mult; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n, q; long long x, l, r; bool overflow = false; vector<node> nodes; cin>>n>>q; for(int i=0; i<n; i++) { node data; cin >> data.add >> data.mult; if(data.mult > 1) { data.threshold = data.add / (data.mult - 1); } else { data.threshold = 0; } nodes.push_back(data); } for(int i=0; i<q; i++) { cin>> x >> l >> r; long long x_val = x; overflow = false; for(int j=l; j<r; j++) { if(overflow) { if(nodes[j].mult > 1) { x = (x * nodes[j].mult) % MOD_VAL; } else { x = (x + nodes[j].add) % MOD_VAL; } } else { x_val = calc(x_val, nodes[j]); if(x_val >= OVERFLOW_THRESHOLD) { overflow = true; x = x_val % MOD_VAL; } else { x = x_val; } } } cout<< x << '\n'; } return 0; } |
English