Anxdada的询问(hard)

TimeLimit:6000MS  MemoryLimit:128MB
64-bit integer IO format:%lld
未提交 | 登录后收藏
Problem Description

Anxdada提了一个问题, 他想考考fold:

给出一个长度为n(1≤n≤1000000)的数组a(下标从1开始), Anxdada有q(1≤q≤1000000)个询问, 对于每次询问: 他想知道数组a中下标在区间[l,r]中所有数字的乘积对固定数字p(1≤p≤1000000000)取余后的结果是多少?

由于这个问题太难了, fold回答不上来.

所以Anxdada简化了一下问题: 保证这次询问的区间[l,r]相比上一次询问(如果存在)的区间[l',r']都有1≤l'≤l≤n 1≤r'≤r≤n

这个问题依然很难, 你能帮帮fold解决这个问题吗?


由于输入数据量大, 推荐使用输入输出外挂: https://paste.ubuntu.com/p/4Gkh5THTvB/ (时限>标程2倍时间)

因为被大量线段树卡过去了,时间减少到6000ms,(我测了下,只要是正解,则80%的时间都在输入输出上,你写得常数再大对时间也没啥影响,除非你挫到写出6倍常数)

Input

第一行有2个整数n(1≤n≤1000000)和p(1≤p≤1000000000), 含义如题面所述

第二行包含n个整数代表数组a中的元素(0a[i]1000000000)

第三行包含一个整数q(1≤q≤1000000), 代表询问的个数

接下来q行, 每一行包含2个整数li, ri(1≤li≤rin), 代表Anxdada的询问区间是[li, ri]

对于任意的1<i≤q, 都满足: 1≤li-1≤li≤n 1≤ri-1≤rin

Output

输出q行, 每一行一个非负整数表示询问的答案

SampleInput
3 7
1 2 3
2
1 2
2 3
SampleOutput
2
6
Submit
题目统计信息详细
总AC数62
通过人数16
尝试人数33
总提交量259
AC率6.18%
AC该题后可以添加标签
贴完标签可以获得20ACB。
并且可以获得本题所有提交代码查看权限。
点击标题可以显示标签。
如果你还没认真思考过这题,请不要查看标签
如果您已经通过了该题,请务为该题贴上标签
作者

T^T Online Judge

[BUG反馈] [FAQ] [闽ICP备17026590号-1]
当前版本:3.24 系统时间: