주제 링크 : http://codeforces.com/contest/1293/problem/C
질문의 의미 : Q 쿼리와 2 * N 그리드를 부여 N, Q를 감안할 때.
각 R & LT 질의 주어 I 및 C I , R & LT I는 1 또는 2이고, C 나 N 사이에, 즉, (R & 주어진다 1 I , C I 질의 상태 천이)에서의 시작점 ( 그것은) 경과되지 / 전달된다.
1,2- 점 (1,2)을 통과 할 수있는 질의, (1, 2)을 소정이 시간과 소정의 점 (1,2)의 경우 이후 일 수있다.
(1,1) 올 (2, N)에서 Q. 캔은 주어진 쿼리는 시작과 끝을 통과하지 않도록.
아이디어 :
n 및 q는 최대 1E5하기 때문에, 직접 N * Q 폭력이 아니다.
때문에 세 천명 그래서 물 문제는, 그것을 할 수 있습니다 :
너무 많이 생각하지 마십시오 :)
세그먼트 트리가 수행해야합니다
할 수 있어야 각각의 통과 점을 열거 할 수 없습니다 문제입니다
근처의 포인트는 세 개의 점의 최대 영향을주기 때문에
이것은 해당 시점 플러스가 삭제 될 때 지점 천공 기여와 함께, 직접 O (Q) 일 수있다.
#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; CONST INT maxn 1E5 + = 10 ; INT의 C [ 2 ] [maxn]; int로 주 () { INT의 N, Q, NUM = 0 ; scanf와 ( " % D % D " , N, Q); 위한 ( INT 난 = 0 ; I <Q; I ++ ) { INT의 X, Y; scanf와 ( " % D % D ' , X, Y); X - ; 경우 (c [X] [Y]) { C는 [X]는 [Y]는 = 0 ; 경우 (c [X ^ 1 ] [Y]) num-- ; 경우 (c [X ^ 1 ] [Y + 1 ]) num-- ; 경우 (c [X ^ 1 ] Y- 1 ]) num-- ; } 다른 { C는 [X]는 [Y]는 = 1 ; 경우 (c [X ^ 1 ] [Y]) NUM ++ ; 경우 (c [X ^ 1 ] [Y + 1 ]) NUM ++ ; 경우 (c [X ^1 ] [Y-1 ]) NUM ++ ; } 경우 (NUM == 0 ) printf와 ( " 예 \ n " ); 다른 사람 의 printf ( " 없음 \ n " ); } 반환 0 ; }