#2895. linear

linear

题目描述

小 T 即将从 TeaLand 小学毕业!现在他正在进行期末考试,并且被最后一道题卡住了。

这道题是这样说的:给出 n\red{n} 个线性函数 f1,f2,f3,,fn\red{f_1,f_2,f_3,\dots,f_n},求出 fr(fr1(fr2(fl(x))))\red{f_r(f_{r-1}(f_{r-2}(\dots f_l(x))))} 的值。

很显然,只需要从后往前求出每一个值后再继续计算就可以了,但是 TeaLand 位于充满魔法与奇迹的世界上,所以试卷上的 l,r,x\red{l,r,x} 都会随着时间变化,不过好在 fi\red{f_i} 不会变化!

你能帮帮小 T 吗?

说人话:给出 n\red n 个线性函数 fi(x)=kix+bi\red{f_i(x)=k_ix+b_i},有 m\red m 次询问,求出从 l\red lr\red r 依次计算 fi(x)\red{f_i(x)} 的结果,其中 i>l\red{i>l}x\red xfi1\red{f_{i-1}} 的结果 ,否则为给定的参数 x\red x

输入格式

第一行两个正整数 n,m\red{n,m}

之后 n\red n 行,每行两个整数 ki,bi\red{k_i,b_i},表示初始时的一个线性函数 fi\red{f_i}

之后 m\red m 行,每行三个整数 l,r,x\red{l,r,x},表示一个询问。

输出格式

假设第 i\red i 次询问的答案是 Ai\red{A_i},由于答案非常大,所有首先将 Ai\red{A_i}109+7\red{10^9+7} 取模,由于询问量也非常大,所以你只需要输出所有 Ai\red{A_i} 的异或即可。

即:如果 m=3\red{m=3} 而你的答案分别是 {109+8,2,3}\red{\{10^9+8, 2, 3\}},那么你应该输出一行一个整数 0\red 0,因为 109+8mod109+7=1\red{10^9+8\bmod10^9+7=1}1 xor 2 xor 3=0\red{1\texttt{ xor }2\texttt{ xor }3=0}

样例

输入样例

3 4
1 2
3 4
5 6
1 1 1
2 2 1
3 3 1
1 3 2

输出样例

89

提示

对于 30%\red{30\%} 的数据,保证 n,m103\red{n,m\le10^3}

对于另外 10%\red{10\%} 的数据,保证 l=1\red{l=1}

对于另外 30%\red{30\%} 的数据,保证 n,m105\red{n,m\le10^5}

对于所有的数据,保证 1n,m2×106\red{1\le n,m\le2\times10^6}1kibi,x109\red{1\le k_i\,b_i,x\le 10^9}1lrn\red{1\le l\le r\le n}1in\red{1\le i\le n}

由于输入数据量非常大,你可能需要如下的快速读入:

// Here we don't need long long because the input data never greater than 1e9
int read() {
    int x = 0; char ch = 0;
    while(ch < '0' || ch > '9') ch = getchar();
    while(ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
    return x;
}

统计

相关

在下列比赛中:

集训班18