P5057 [CQOI2006] 간단한 질문 접두사 차이 XOR / 펜윅 트리

좋은 생각, 좋은 생각. . .


 

아이디어 : 접두사 차동 XOR

제출 : 1

해결 방법 : 같은 $의 qwq의 $의 아이디어와 간격, 메시지의 단일 지점, 펜윅 트리를 수정

#INCLUDE <cstdio> 
#INCLUDE <iostream> 
 사용  스페이스 성병;
#DEFINE R 레지스터 INT 
 #DEFINE ULL 긴 부호 길이
 #DEFINE 줄게 긴 긴
 #DEFINE의 일시 정지 (위한 (R I = 1; i가 <= 10000000000; I ++))
 #DEFINE freopen을 IN ( '. NOIPAK ++에서 ","R "표준 입력)
 #DEFINE 아웃 freopen을 ("나가자 밖으로 ","w ", 표준 출력)
 공간 FREAD {
 정적   B의 [ 1 << 15 ] * S = B * D = B; 
#ifndef 잭 
#DEFINE의 getchar가 () (S == && D (D = (S = B) + FREAD (B, 1,1- << 15 표준 입력), S == D) EOF?
g () { 
    R의 RET = 0 , FIX = 1 ; 등록  CH 단계; 동안 (! isdigit에 (CH = getchar가 ())) 수정 = 채널 == ' - ' - 1 : 수정;
    경우 (CH2 == EOF) 복귀 EOF; DO RET RET = * 10 + (CH ^ 48 ); 반면 (isdigit에 (CH = getchar가 ())); 반환 RET의 *의 수정; 
} 인라인 부울 IsEmpty 함수 ( CONST  CHAR & CH) {  (CH2 <= 36 || CH> = 127 );} 
인라인보이드 GS (  *의 {S) 
    레지스터  CH 단계; 반면 (IsEmpty 함수 (CH = getchar가 ()));
     *의 ++ = 채널을; 반면 (IsEmpty 함수 (CH2 =! getchar가 ())); 
} 
} 사용 FREAD :: g을; 사용 FREAD :: GS를; 

공간 Luitaryi {
 CONST의  INT의 N = 100010 ;
INT의 N, m;
INT의 C [N]; 
인라인 INT LBT ( INT X) { 돌아가 , X - X} 
인라인 공극 추가 ( INTPOS) {  (; POS <= N] + = LBT 포스 (POS)) C [POS] ^ = 1 ;} 
인라인 INT의 쿼리 ( INT의 POS) {R RET = 0 ;
     (; POS; pos- = LBT (POS)) RET ^ = C [POS]; 반환 RET를; 
} 
인라인 공극 의 main () { 
    N = g (), m = g ();
    반면 (M-- ) { 
        R 연산 = g (), L, R; 경우 (OP & 1 ) L = g (), R = g ()는, (l) 부가 추가 (R + 1 );
         , L = g ()의 printf ( " % D \ 없음 " 쿼리 (l)); 
    } 
}
} 
주 () {서명 
    Luitaryi :: 주 (); 
    반환  0 ; 
}

2019년 7월 17일

추천

출처www.cnblogs.com/Jackpei/p/11204438.html