РАЗДЕЛЯЙ и ВЛАДЕЙ 2.0

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

요약
서로 다른 값을 가진 배열과 여러 질의(l, r, d)가 주어질 때, [l, r] 구간에서 값이 d의 약수이거나 배수인 위치의 개수를 센다.
난이도

어려움10점 중 8점

유형
정수론, 누적 합, 이분 탐색, 정렬
정답자
아직 제출이 없습니다

문제

Сашка много обича операцията деление. Дотолкова я обича, че тя измисли задача, която да даде на Есенния турнир по информатика, свързана само и единствено с нея. Тя включва любимата си редица от NN цели, положителни числа a_1a\_1, a_2a\_2, …\dots, a_Na\_N и QQ въпроса, съответно ii-тият от тях характеризиран от три цели положителни числа l_il\_i, r_ir\_i и d_id\_i. Въпросите са за броя числа на позициите от l_il\_i до r_ir\_i в редицата, които са делители или са кратни на d_id\_i. Тъй като времето тече, а Вие копнеете за първото място, Вие се захващате да напишете програма divide.cpp, която да отговори на въпросите.

입력

На първия ред от стандартния вход са дадени целите, положителни числа NN и QQ, съответно броят числа в редицата и броят въпроси. На втория ред от стандартния вход са дадени NN числа a_1a\_1, a_2a\_2, …\dots, a_Na\_N. На останалите QQ реда от стандартния вход са описани въпросите, като съответно на ii-тият ред са дадени трите числа, които характеризират ii-тия въпрос, а именно l_il\_i, r_ir\_i и d_id\_i.

출력

На стандартния изход изведете един ред, съдържащ QQ числа, като ii-тото от тях да е равно на отговора на ii-тият въпрос.

제한

  • 1≤N,Q≤100,0001 ≤ N,Q ≤ 100\\, 000
  • 1≤a_i,d_i≤200,0001 ≤ a\_i, d\_i ≤ 200\\, 000
  • 1≤l_i≤r_i≤N1 ≤ l\_i ≤ r\_i ≤ N
  • a_i≠a_ja\_i \ne a\_j за всички 1≤i<j≤N1 ≤ i < j ≤ N.

예제1

  1. 예제 1

    입력
    8 5
    12 10 3 18 6 72 28 42
    1 8 6
    3 7 7
    2 6 9
    1 5 5
    4 8 4
    
    예상 출력
    6 1 3 1 2