#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define int long long
#define mp make_pair
const int mod = 1e9 + 7;
const int max_pot = 23;
const int max_n = 500000;
/*int tree[(1 << max_pot) * 2 + 7];
int pref[max_n + 7];
int nastepny[max_n + 7];
void uptade(int a , int value)
{
tree[a] = value;
a /= 2;
while(a > 0)
{
tree[a] = tree[a * 2] * tree[a * 2 + 1];
tree[a] %= mod;
a /= 2;
}
}
int query(int l , int r)
{
l += (1 << max_pot);
r += (1 << max_pot);
int ans = 1;
while(l <= r)
{
if(l % 2 == 1)
{
ans *= tree[l++];
ans %= mod;
}
if(r % 2 == 0)
{
ans *= tree[r--];
ans %= mod;
}
l /= 2;
r /= 2;
}
return ans;
}*/
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//for(int i = 1; i <= (1 << max_pot) * 2; i++)tree[i] = 1;
int n , q;
cin >> n >> q;
vector <pair <int , int> > v(n + 1);
for(int i = 1; i <= n; i++)cin >> v[i].second >> v[i].first;
while(q--)
{
int x , l , r;
cin >> x >> l >> r;
if(l == n || l == r)
{
cout << x << '\n';
continue;
}
l++;
while(l <= r)
{
if(x * v[l].first > x + v[l].second)
{
x *= v[l].first;
}
else x += v[l].second;
l++;
//if(x >= mod)break;
x %= mod;
}
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 73 74 75 76 77 78 79 | #include <bits/stdc++.h> using namespace std; #define pb push_back #define int long long #define mp make_pair const int mod = 1e9 + 7; const int max_pot = 23; const int max_n = 500000; /*int tree[(1 << max_pot) * 2 + 7]; int pref[max_n + 7]; int nastepny[max_n + 7]; void uptade(int a , int value) { tree[a] = value; a /= 2; while(a > 0) { tree[a] = tree[a * 2] * tree[a * 2 + 1]; tree[a] %= mod; a /= 2; } } int query(int l , int r) { l += (1 << max_pot); r += (1 << max_pot); int ans = 1; while(l <= r) { if(l % 2 == 1) { ans *= tree[l++]; ans %= mod; } if(r % 2 == 0) { ans *= tree[r--]; ans %= mod; } l /= 2; r /= 2; } return ans; }*/ signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //for(int i = 1; i <= (1 << max_pot) * 2; i++)tree[i] = 1; int n , q; cin >> n >> q; vector <pair <int , int> > v(n + 1); for(int i = 1; i <= n; i++)cin >> v[i].second >> v[i].first; while(q--) { int x , l , r; cin >> x >> l >> r; if(l == n || l == r) { cout << x << '\n'; continue; } l++; while(l <= r) { if(x * v[l].first > x + v[l].second) { x *= v[l].first; } else x += v[l].second; l++; //if(x >= mod)break; x %= mod; } cout << x << '\n'; } return 0; } |
English