Codeforces Beta Round 88
D
Not Quick Transformation
Codeforces
2500
原题
← CE →
翻译中…

Let $*a*$ be an array consisting of $*n*$ numbers. The array's elements are numbered from $1$ to $*n*$, $*even*$ is an array consisting of the numerals whose numbers are even in $*a*$ ($*even*_{*i*} = *a*_{2*i*}$, $1 ≤ 2*i* ≤ *n*$), $*odd*$ is an array consisting of the numberals whose numbers are odd in $*а*$ ($*odd*_{*i*} = *a*_{2*i* - 1}$, $1 ≤ 2*i* - 1 ≤ *n*$). Then let's define the transformation of array $*F*(*a*)$ in the following manner:

翻译中…
  • if $*n* > 1$, $*F*(*a*) = *F*(*odd*) + *F*(*even*)$, where operation "$+$" stands for the arrays' concatenation (joining together)
  • if $*n* = 1$, $*F*(*a*) = *a*$
翻译中…

Let $*a*$ be an array consisting of $*n*$ numbers $1, 2, 3, ..., *n*$. Then $*b*$ is the result of applying the transformation to the array $*a*$ (so $*b* = *F*(*a*)$). You are given $*m*$ queries $(*l*, *r*, *u*, *v*)$. Your task is to find for each query the sum of numbers $*b*_{*i*}$, such that $*l* ≤ *i* ≤ *r*$ and $*u* ≤ *b*_{*i*} ≤ *v*$. You should print the query results modulo $*mod*$.

翻译中…

Input

翻译中…

The first line contains three integers $*n*$, $*m*$, $*mod*$ ($1 ≤ *n* ≤ 10^{18}, 1 ≤ *m* ≤ 10^{5}, 1 ≤ *mod* ≤ 10^{9}$). Next $*m*$ lines describe the queries. Each query is defined by four integers $*l*$, $*r*$, $*u*$, $*v*$ ($1 ≤ *l* ≤ *r* ≤ *n*$, $1 ≤ *u* ≤ *v* ≤ 10^{18}$).

翻译中…

Please do not use the %lld specificator to read or write 64-bit integers in C++. Use %I64d specificator.

翻译中…

Output

翻译中…

Print $*m*$ lines each containing an integer — remainder modulo $*mod*$ of the query result.

翻译中…

Note

翻译中…

Let's consider the first example. First let's construct an array $*b* = *F*(*a*) = *F*([1, 2, 3, 4])$.

翻译中…
  • Step 1. $*F*([1, 2, 3, 4]) = *F*([1, 3]) + *F*([2, 4])$
  • Step 2. $*F*([1, 3]) = *F*([1]) + *F*([3]) = [1] + [3] = [1, 3]$
  • Step 3. $*F*([2, 4]) = *F*([2]) + *F*([4]) = [2] + [4] = [2, 4]$
  • Step 4. $*b* = *F*([1, 2, 3, 4]) = *F*([1, 3]) + *F*([2, 4]) = [1, 3] + [2, 4] = [1, 3, 2, 4]$
翻译中…

Thus

翻译中…

b = [1, 3, 2, 4]

翻译中…

. Let's consider the first query

翻译中…

l = 2, r = 3, u = 4, v = 5

翻译中…

. The second and third positions in the array

翻译中…

b

翻译中…

do not have numbers in the range

翻译中…

[4, 5]

翻译中…

, so the sum obviously equals zero. Let's consider the second query

翻译中…

l = 2, r = 4, u = 1, v = 3

翻译中…

. The second and third positions have two numbers that belong to the range

翻译中…

[1, 3]

翻译中…

, their sum equals 5.

翻译中…

样例

Input #1
4 5 10000
2 3 4 5
2 4 1 3
1 2 2 4
2 3 3 5
1 3 3 4
Output #1
0
5
3
3
3
InputCopy OutputCopy
Input #2
2 5 10000
1 2 2 2
1 1 4 5
1 1 2 5
1 1 1 3
1 2 5 5
Output #2
2
0
0
1
0
InputCopy OutputCopy
题目信息
题号
117D
时间限制
6 s
内存限制
256 MB
标签
分治
数学

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。