RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
문제 JOI00041

衝突 (Collision)

설명

ビ太郎は,大きな円形の湖の周りに住んでいる.湖の周りの長さは L であり,湖の周りのある地点にはビ太郎の家がある.ビ太郎の家から湖の周りを時計回りに x ( \(0 \le x < L\) ) 移動した地点を地点 x と呼ぶ.現在,湖の周りで行われるマラソン大会が企画されている.

ビ太郎はマラソン大会は以下のように行われる予定であることを聞いた.

0 から L - 1 までの番号が付けられたゼッケンが 1 枚ずつ用意されている.マラソン大会の参加者はいずれかのゼッケンを着用する.ゼッケン l ( 0 ≦ l ≦ L - 1 ) を着用する参加者のスタート地点は地点 l となる.

マラソン大会がスタートした後, T ビョウにわたり,参加者はそれぞれの速度で湖の周りを時計回りに移動する.マラソン大会がスタートしてから, t ビョウ ( \(0 \le t \le T\) ) 経った時点を時刻 t と呼ぶ.

ビ太郎はマラソン大会の参加者名簿を持っている.現在は N 人の参加者が参加者名簿に記載されていて, i 番目の参加者 ( \(1 \le i \le N\) ) はゼッケン A i を着用し, 1 ビョウあたり S i の速度で湖の周りを時計回りに移動する予定である.

参加者名簿を元に,ビ太郎はマラソン大会中に起こる 衝突 の回数を求めた.ここで,衝突とは異なる参加者 2 人が同じ地点にいることを指すものとする.厳密には, 0 ≦ p < q ≦ L - 1 を満たす整数 p, q と \(0 \le t \le T\) を満たす 実数 t からなる組 (p, q, t) で,以下の条件を満たすものの個数を求めた.

ゼッケン p を着用した参加者がいる.

ゼッケン q を着用した参加者がいる.

ゼッケン p を着用した参加者とゼッケン q を着用した参加者が,時刻 t に同じ地点にいる.

しかし,その後参加者名簿に Q 回の変更が行われた. j 番目 ( \(1 \le j \le Q\) ) の変更は 2 つの整数 X j , Y j で表され,以下のようなものである.

現在,ゼッケン X j を着用し, 1 ビョウあたり Y j の速度で湖の周りを時計回りに移動する人が参加者名簿に記載されている場合,その人を参加者名簿から削除する.そうでない場合,ゼッケン X j を着用し, 1 ビョウあたり Y j の速度で湖の周りを時計回りに移動する人を新たに参加者名簿に追加する.

ただし,いずれの変更が終了した時点でも,参加者名簿に記載されている参加者は 2 人以上おり,かつ参加者の着用するゼッケンは相異なることが保証される.

ビ太郎はそれぞれの変更が終了した時点での参加者における,マラソン大会中に起こる衝突の回数を知りたい.問題文の制約より,マラソン大会中に起こる衝突の回数は有限であることが証明できる.

マラソン大会と参加者名簿への変更の情報が与えられたとき,それぞれの変更が終了した時点での参加者における,マラソン大会中に起こる衝突の回数を 1 000 000 007 で割ったあまりを求めるプログラムを作成せよ.

제약

\(2 \le N\) .

N ≦ L ≦ 10 9 .

1 ≦ T ≦ 10 9 .

0 ≦ A i ≦ L - 1 ( \(1 \le i \le N\) ).

A i ≠ A j ( \(1 \le i < j \le N\) ).

1 ≦ S i ≦ 10 9 ( \(1 \le i \le N\) ).

\(1 \le Q\) .

N + Q ≦ 100 000 .

0 ≦ X j ≦ L - 1 ( \(1 \le j \le Q\) ).

1 ≦ Y j ≦ 10 9 ( \(1 \le j \le Q\) ).

いずれの変更が終了した時点でも,参加者は 2 人以上いる.

いずれの変更が終了した時点でも,参加者のスタート地点は相異なる.

入力される値はすべて整数である.

( 10 点) T = 1 , S i ≦ 2 ( \(1 \le i \le N\) ), Y j ≦ 2 ( \(1 \le j \le Q\) ).

( 8 点) N ≦ 2 000 , Q = 1 .

( 11 点) N ≦ 2 000 , Q ≦ 2 000 .

( 27 点) Q = 1 .

( 34 点) N + Q ≦ 78 000 .

( 10 点) 追加の制約はない.

입력 형식

入力は以下の形式で与えられる.

N L T

A 1 A 2 ... A N

S 1 S 2 ... S N

Q

X 1 Y 1

X 2 Y 2

:

X Q Y Q

출력 형식

Q 行に出力せよ. j 行目 ( \(1 \le j \le Q\) ) には j 番目の変更が終了した時点での参加者における,マラソン大会中に起こる衝突の回数を 1 000 000 007 で割ったあまりを出力せよ.

예제 1
입력
3 7 2
1 6 3
4 1 6
1
4 2
출력
7
예제 2
입력
3 6 1
1 3 4
1 1 1
2
0 2
1 1
출력
1
0
예제 3
입력
2 100000 993754689
58683 3478
28489 48682814
1
28482 39599461
출력
9265409
예제 4
입력
7 100 100
34 12 46 23 57 63 99
12 34 23 12 34 12 23
5
67 34
99 23
33 34
99 12
23 12
출력
330
264
341
440
341
문제 정보

생성자가 기록되지 않았습니다.

출처 JOI 2025 Preliminary 2

평가 및 의견

衝突 (Collision)

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

Log in to rate problems.

개별 의견

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

풀이 제출

衝突 (Collision)

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8