Farmer John이 3SUM을 푼다
시간 제한2초메모리 제한512 MB
각 질의마다 부분 배열 A[a..b]에서 값의 합이 0이 되는 서로 다른 세 인덱스 조합의 개수를 센다.
문제
Farmer John은 알고리즘 설계에서 큰 돌파구를 찾았다고 믿는다. 그는 3SUM 문제에 대해 거의 선형 시간에 동작하는 알고리즘을 찾았다고 주장한다. 3SUM 문제는 지금까지 알려진 해법 중 이차 시간보다 월등히 빠른 것이 없다는 점으로 유명하다. 3SUM 문제의 한 가지 형태는 다음과 같다. 정수 배열 이 주어졌을 때, 서로 다른 인덱스 의 순서 없는 삼중항 중 을 만족하는 것의 개수를 세는 것이다.
Farmer John의 주장을 확인하기 위해 Bessie는 개의 정수로 이루어진 배열 를 준비했다 (). Bessie는 또한 개의 질의를 준다 (). 각 질의는 두 인덱스 으로 구성된다. 각 질의에 대해 Farmer John은 부분 배열 에서 3SUM 문제를 풀어야 한다.
안타깝게도 Farmer John은 방금 자신의 알고리즘에 결함이 있음을 발견했다. 그는 알고리즘을 고칠 수 있다고 확신하지만, 그 동안 Bessie의 테스트를 통과할 수 있도록 당신에게 도움을 요청한다!
입력
첫 번째 줄에는 공백으로 구분된 두 정수 과 가 주어진다. 두 번째 줄에는 배열 의 원소 이 공백으로 구분되어 주어진다. 이후 개의 줄 각각에는 질의를 나타내는 두 정수 와 가 공백으로 구분되어 주어진다.
모든 배열 원소 에 대해 이 보장된다.
출력
출력은 개의 줄로 구성된다. 각 줄 에는 번째 질의의 답인 정수 하나를 출력한다. 오버플로를 피하기 위해 64비트 정수를 사용해야 한다.
힌트
첫 번째 질의에서 가능한 삼중항은 와 이다.