Codeforces 라운드 # 614 (사업부. 2) C. 네코의 미로 게임

주제 링크 : 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 ; 
}

추천

출처www.cnblogs.com/myrtle/p/12216091.html