포럼
문제 USACO0314

스프링클러

설명

농부 존은 넓은 밭을 가지고 있는데, 그 일부에 단옥수수를 심으려고 생각 중이다. 밭을 측량해 본 결과, 농부 존의 밭은 \((N-1) \times (N-1)\) 크기의 정사각형을 이룬다는 것을 알았다. 남서쪽 모서리는 좌표 \((0,0)\)에 있고, 북동쪽 모서리는 \((N-1,N-1)\)에 있다.

어떤 정수 좌표들에는 물과 비료를 모두 뿌리는 양방향 헤드 스프링클러가 있다. 좌표 \((i,j)\)에 있는 양방향 헤드 스프링클러는 그 지점의 북쪽과 동쪽에 있는 밭 부분에 물을 뿌리고, 남쪽과 서쪽에 있는 밭 부분에 비료를 뿌린다. 형식적으로, 이 스프링클러는 \(N \geq x \geq i\)이고 \(N \geq y \geq j\)인 모든 실수 좌표 \((x,y)\)에 물을 뿌리고, \(0 \leq x \leq i\)이고 \(0 \leq y \leq j\)인 모든 실수 좌표 \((x,y)\)에 비료를 뿌린다.

농부 존은 모서리 좌표가 정수인, 축에 평행한 어떤 직사각형에 단옥수수를 심고 싶다. 하지만 단옥수수가 자라려면 직사각형 안의 모든 점이 양방향 헤드 스프링클러에 의해 물과 비료를 모두 받아야 한다. 그리고 당연히 직사각형의 넓이는 양수여야 한다. 그렇지 않으면 농부 존은 그 안에서 옥수수를 전혀 기를 수 없을 것이다!

농부 존이 단옥수수를 기를 수 있는, 넓이가 양수인 직사각형의 개수를 구하도록 도와주자. 이 수는 매우 클 수 있으므로, 이 수를 \(10^9 + 7\)로 나눈 나머지를 출력한다.

출제자: Dhruv Rohatgi

제약

출제자: Dhruv Rohatgi

입력 형식

입력의 첫째 줄에 밭의 크기를 나타내는 정수 \(N\)이 하나 주어진다 (\(1 \leq N \leq 10^5\)).

다음 \(N\)개의 줄에는 각각 공백으로 구분된 정수 두 개가 주어진다. 이 정수들이 \(i\)\(j\)라면 (\(0 \leq i,j \leq N-1\)), \((i,j)\)에 위치한 스프링클러를 나타낸다.

각 열에 정확히 하나의 스프링클러가 있고 각 행에도 정확히 하나의 스프링클러가 있음이 보장된다. 즉, 어떤 두 스프링클러도 같은 \(x\)좌표를 갖지 않고, 어떤 두 스프링클러도 같은 \(y\)좌표를 갖지 않는다.

출력 형식

물과 비료를 모두 완전히 받는, 넓이가 양수인 직사각형의 개수를 \(10^9 + 7\)로 나눈 나머지를 나타내는 정수 하나를 출력한다.

Standard input / output
This problem is judged over standard input/output. The original contest used named files — if you prefer the classic interface, tick “File I/O” on the submit form and read/write these files instead:
입력을 읽을 파일 sprinklers.in · 출력을 쓸 파일 sprinklers.out
예제 1
입력
5
0 4
1 1
2 2
3 0
4 3
출력
21
문제 정보

riseoj 작성

출처 올림피아드 > USACO > 2017-2018 > January > Platinum

태그

평가 및 의견

Sprinklers

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 1 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

Sprinklers

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
파일 입출력 (sprinklers.in / sprinklers.out — classic USACO interface; off = stdin/stdout)
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8