아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Крабсбургеры

시간 제한3초메모리 제한1024 MB

요약
배열을 k개의 비어 있지 않은 연속 구간으로 나누어 i번째 구간의 XOR이 [l_i, r_i]에 들어가게 하는 방법의 수를 센다.
난이도

보통10점 중 7점

유형
동적 계획법, 누적 합, 비트 연산, 수학
정답자
아직 제출이 없습니다

문제

Как известно, главная особенность рецепта Крабсбургера --- это отсутствие какого-либо рецепта. Для того, чтобы иметь хоть какую-то информацию о бургерах, каждый ингридиент имеет некоторую характеристику --- КрабсИндекс. Известно лишь одно: если Крабсбургер был приготовлен с использованием mm ингридиентов с КрабсИндексами a_1,a_2,⋯ ,a_ma\_1, a\_2, \cdots, a\_m, то КрабсИндекс получившегося бургера будет равен a_1⊕a_2⊕⋯⊕a_ma\_1 \oplus a\_2 \oplus \cdots \oplus a\_m.

Одним солнечным утром в КрастиКрабс зашли kk посетителей. Каждый заказал себе фирменный Крабсбургер, причем ii-й посетитель пожелал, чтобы КрабсИндекс его бургера был не меньше, чем l_il\_i, но и не больше, чем r_ir\_i.

Перед поваром стоит непростая задача --- он должен приготовить все kk бургеров, удовлетворив пожелания клиентов, и обязательно использовав все имеющиеся ингридиенты. Перед ним лежит в ряд nn ингридиентов. Он kk раз должен взять несколько (не меньше одного) ингридиентов из левого конца ряда, и приготовить из них новый бургер, проследив, чтобы он удовлетворял заказу. Повар готовит бургеры в том же порядке, в котором поступили заказы от клиентов.

Помогите ему узнать, сколько существует способов справиться с задачей. Два способа считаются различными, если есть хотя бы один ингридиент, попавший в бургеры к разным клиентам в этих разбиениях.

입력

В первой строке входного файла даны два целых числа n,kn, k (1≤n⋅k≤100,000,k≤n1 \le n \cdot k \le 100\\,000, k \le n) --- количество ингридиентов и число клиентов.

В следующей строке дано nn целых чисел a_ia\_i (0≤a_i≤1,000,000,0000 \le a\_i \le 1\\,000\\,000\\,000) --- КрабсИндексы ингридиентов.

В следующих kk строках дано по 2 целых числа l_i,r_il\_i, r\_i (0≤l_i≤r_i≤1,000,000,0000 \le l\_i \le r\_i \le 1\\,000\\,000\\,000) --- пожелания о КрабсИндексе от ii-го клиента.

출력

Выведите одно целое число --- количество искомых разбиений по модулю 1,000,000,0071\\,000\\,000\\,007.

힌트

Исключающее или (⊕\oplus) --- логическая операция, которая имеет следующую таблицу истинности:

  • 0⊕0=00 \oplus 0=0
  • 0⊕1=10 \oplus 1=1
  • 1⊕0=11 \oplus 0=1
  • 1⊕1=01 \oplus 1=0

<<Исключающее или>> чисел, состоящих из нескольких бит, считается побитово. Например, 2⊕3=12 \oplus 3=1, 2⊕5=72 \oplus 5=7, 5⊕5=05 \oplus 5=0.

Более подробно про <<исключающее или>> можно почитать тут: https://ru.wikipedia.org/wiki/Сложение\_по\_модулю\_2

예제1

  1. 예제 1

    입력
    7 3
    1 0 1 0 1 0 1
    1 1
    0 0
    1 1
    
    예상 출력
    6