CF117D.Not Quick Transformation

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Let aa be an array consisting of nn numbers. The array's elements are numbered from 11 to nn , eveneven is an array consisting of the numerals whose numbers are even in aa ( eveni=a2ieven_{i}=a_{2i} , 1<=2i<=n1<=2i<=n ), oddodd is an array consisting of the numberals whose numbers are odd in аа ( oddi=a2i1odd_{i}=a_{2i-1} , 1<=2i1<=n1<=2i-1<=n ). Then let's define the transformation of array F(a)F(a) in the following manner:

  • if n>1 , F(a)=F(odd)+F(even)F(a)=F(odd)+F(even) , where operation " ++ " stands for the arrays' concatenation (joining together)
  • if n=1n=1 , F(a)=aF(a)=a

Let aa be an array consisting of nn numbers 1,2,3,...,n1,2,3,...,n . Then bb is the result of applying the transformation to the array aa (so b=F(a)b=F(a) ). You are given mm queries (l,r,u,v)(l,r,u,v) . Your task is to find for each query the sum of numbers bib_{i} , such that l<=i<=rl<=i<=r and u<=bi<=vu<=b_{i}<=v . You should print the query results modulo modmod .

输入格式

The first line contains three integers nn , mm , modmod ( 1<=n<=1018,1<=m<=105,1<=mod<=1091<=n<=10^{18},1<=m<=10^{5},1<=mod<=10^{9} ). Next mm lines describe the queries. Each query is defined by four integers ll , rr , uu , vv ( 1<=l<=r<=n1<=l<=r<=n , 1<=u<=v<=10181<=u<=v<=10^{18} ).

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

输出格式

Print mm lines each containing an integer — remainder modulo modmod of the query result.

输入输出样例

  • 输入#1

    4 5 10000
    2 3 4 5
    2 4 1 3
    1 2 2 4
    2 3 3 5
    1 3 3 4
    

    输出#1

    0
    5
    3
    3
    3
    
  • 输入#2

    2 5 10000
    1 2 2 2
    1 1 4 5
    1 1 2 5
    1 1 1 3
    1 2 5 5
    

    输出#2

    2
    0
    0
    1
    0
    

说明/提示

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

  • Step 1. F([1,2,3,4])=F([1,3])+F([2,4])F([1,2,3,4])=F([1,3])+F([2,4])
  • Step 2. F([1,3])=F([1])+F([3])=[1]+[3]=[1,3]F([1,3])=F([1])+F([3])=[1]+[3]=[1,3]
  • Step 3. F([2,4])=F([2])+F([4])=[2]+[4]=[2,4]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]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]b=[1,3,2,4] . Let's consider the first query l=2,r=3,u=4,v=5l=2,r=3,u=4,v=5 . The second and third positions in the array bb do not have numbers in the range [4,5][4,5] , so the sum obviously equals zero. Let's consider the second query l=2,r=4,u=1,v=3l=2,r=4,u=1,v=3 . The second and third positions have two numbers that belong to the range [1,3][1,3] , their sum equals 5.

首页