#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAX = 500005;
const ll MOD = 1e9 + 7;
pair<ll, ll> events[MAX];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, q;
cin >> n >> q;
for(int i = 1; i <= n; i++){
ll a, b;
cin >> a >> b;
events[i] = {a, b};
}
while(q--){
ll x, l, r;
cin >> x >> l >> r;
ll res = x;
ll res_real = x;
for(int i = l + 1; i <= r; i++){
auto [a, b] = events[i];
bool multiply = false;
if(b == 1 || b == 0){
multiply = false;
} else if(res_real > LLONG_MAX / b){
multiply = true;
} else {
multiply = (res_real * b > res_real + a);
}
if(multiply){
res = res * b % MOD;
if(res_real <= LLONG_MAX / b)
res_real = res_real * b;
else
res_real = LLONG_MAX;
} else {
res = (res + a) % MOD;
if(res_real <= LLONG_MAX - a)
res_real = res_real + a;
else
res_real = LLONG_MAX;
}
}
cout << res << "\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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAX = 500005; const ll MOD = 1e9 + 7; pair<ll, ll> events[MAX]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n, q; cin >> n >> q; for(int i = 1; i <= n; i++){ ll a, b; cin >> a >> b; events[i] = {a, b}; } while(q--){ ll x, l, r; cin >> x >> l >> r; ll res = x; ll res_real = x; for(int i = l + 1; i <= r; i++){ auto [a, b] = events[i]; bool multiply = false; if(b == 1 || b == 0){ multiply = false; } else if(res_real > LLONG_MAX / b){ multiply = true; } else { multiply = (res_real * b > res_real + a); } if(multiply){ res = res * b % MOD; if(res_real <= LLONG_MAX / b) res_real = res_real * b; else res_real = LLONG_MAX; } else { res = (res + a) % MOD; if(res_real <= LLONG_MAX - a) res_real = res_real + a; else res_real = LLONG_MAX; } } cout << res << "\n"; } return 0; } |
English