| @ -0,0 +1,68 @@ | |||
| #!/usr/bin/python3 | |||
| # https://www.hackerrank.com/challenges/arithmetic-progressions | |||
| import sys, math | |||
| def read_ints(): | |||
| return [int(x) for x in sys.stdin.readline().split()] | |||
| def read_sequences(n): | |||
| a = [0] * n | |||
| d = [0] * n | |||
| p = [0] * n | |||
| for i in range(n): | |||
| ints = read_ints() | |||
| a[i] = ints[0] | |||
| d[i] = ints[1] | |||
| p[i] = ints[2] | |||
| return (a, d, p) | |||
| def pow_mod(a, b, mod, acc): | |||
| powa = a % mod | |||
| while b > 0: | |||
| if b & 1 == 1: | |||
| acc *= powa % mod | |||
| powa *= powa % mod | |||
| b >>= 1 | |||
| return acc | |||
| def factorial_mod(n, mod, acc): | |||
| for i in range(2, n+1): | |||
| acc = (acc * i) % mod | |||
| return acc | |||
| def min_const_diff(a, d, p, i, j): | |||
| k = 0 | |||
| v = 1 | |||
| for l in range(i-1, j): | |||
| if p[l] > 0: | |||
| k += p[l] | |||
| if d[l] == 0: | |||
| v = pow_mod(a[l], p[l], 1000003, v) | |||
| else: | |||
| v = pow_mod(d[l], p[l], 1000003, v) | |||
| v = factorial_mod(k, 1000003, v) | |||
| return (k, v) | |||
| def add_powers(p, i, j, v): | |||
| for k in range(i-1, j): | |||
| p[k] += v | |||
| def answer_query(a, d, p): | |||
| ints = read_ints() | |||
| if ints[0] == 0: | |||
| k, v = min_const_diff(a, d, p, ints[1], ints[2]) | |||
| print('{:d} {:d}'.format(k, v)) | |||
| elif ints[0] == 1: | |||
| add_powers(p, ints[1], ints[2], ints[3]) | |||
| def main(): | |||
| n = int(sys.stdin.readline()) | |||
| a, d, p = read_sequences(n) | |||
| q = int(sys.stdin.readline()) | |||
| for i in range(q): | |||
| answer_query(a, d, p) | |||
| if __name__ == '__main__': | |||
| main() | |||