/* 2026
* Maciej Szeptuch
*/
#include <cassert>
#include <cstdio>
const unsigned MOD = 1000000007;
const unsigned MAX_EVENTS = 524288;
int events;
int queries;
int add[MAX_EVENTS];
int mul[MAX_EVENTS];
long long unsigned soldiers;
int start;
int end;
bool big;
int main(void)
{
scanf("%d %d", &events, &queries);
for(int e = 0; e < events; ++e)
scanf("%d %d", &add[e], &mul[e]);
for(int q = 0; q < queries; ++q)
{
scanf("%llu %d %d", &soldiers, &start, &end);
assert(start < MAX_EVENTS);
assert(end < MAX_EVENTS);
big = false;
for(int e = start; e < end; ++e)
{
if(mul[e] == 1 || (!big && soldiers * mul[e] < soldiers + add[e]))
{
soldiers += add[e];
if(soldiers > MOD)
{
big = true;
soldiers -= MOD;
}
}
else
{
soldiers *= mul[e];
if(soldiers > MOD)
{
big = true;
soldiers %= MOD;
}
}
}
printf("%llu\n", soldiers);
}
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 | /* 2026 * Maciej Szeptuch */ #include <cassert> #include <cstdio> const unsigned MOD = 1000000007; const unsigned MAX_EVENTS = 524288; int events; int queries; int add[MAX_EVENTS]; int mul[MAX_EVENTS]; long long unsigned soldiers; int start; int end; bool big; int main(void) { scanf("%d %d", &events, &queries); for(int e = 0; e < events; ++e) scanf("%d %d", &add[e], &mul[e]); for(int q = 0; q < queries; ++q) { scanf("%llu %d %d", &soldiers, &start, &end); assert(start < MAX_EVENTS); assert(end < MAX_EVENTS); big = false; for(int e = start; e < end; ++e) { if(mul[e] == 1 || (!big && soldiers * mul[e] < soldiers + add[e])) { soldiers += add[e]; if(soldiers > MOD) { big = true; soldiers -= MOD; } } else { soldiers *= mul[e]; if(soldiers > MOD) { big = true; soldiers %= MOD; } } } printf("%llu\n", soldiers); } return 0; } |
English