[A oj1741 통해 NOI 정보 전자적 속도 설명

 

 

 

$ 100 \ % $으로 데이터 $ 1≤n 들어 m≤1e6 \ \ \ 0 <= x_i로부터, y_i \ <20,170,927 \ \ 1≤l_i, r_i≤n $

 

 

 

$ 해결 방법 : $

내가 질문을 이해하지 못했다. 이후 잠시 일반적인 이해는 소위 이차원 벡터 v, x 및 y는 두 개의 파라미터하였습니다. 즉, $ \ 배 $ 십자가 제품, 즉 $ (x_i로부터 y_j-x_j y_i) $입니다.

따라서 문제는 $ \ 합을 찾는 각 문의 간격 $ [L, R] $ 들면하면, X 및 Y 시퀀스의 시퀀스를 제공하기위한 것이다 \ 제한 _ {1의 \의 당량 난 <J \의 당량의 R} (x_iy_j-x_jy_i) ^ 2 $. 수리와.

포인트 쌍은 너무 많은 문제가, 단일 지점으로 감 시도 할 수 있습니다 :

첫 번째 분할 광장 :

$ \ 합 \ 제한 _ {1의 \ 당량의 난 J \ 당량의 연구를 <} ^ x_i로부터 2y_j ^ 2-2x_ix_jy_iy_j + x_j ^ 2y_i ^ 2 $

각 지점을 통해 각 지점에 상당한 기여를 세었다. 그래서 :

$ \ 합계 \ limits_ I = {L} ^ x_i로부터 R ^ 2 \ 합계 \ 제한 _ {I} = L ^ RN y_i ^ 2- (\ 합계 \ limits_ I = {L} ^ RN x_iy_i) ^ 2 $

그런 다음 세 가지 개방 펜윅 나무는 별도로 $ {x_i로부터} ^ 2, {y_i} ^ 2, x_i로부터 y_i $ 캔을 유지했다.

 

#INCLUDE <cstdio> 
#INCLUDE <iostream> 
#INCLUDE <CString을> 
사용 스페이스 성병; 
#DEFINE 파 쌍 <-1,11,11-> 
의 typedef 긴 긴 LL; 
CONST LL 모드 = 20170927; 
판독 LL () 
{ 
    INT (X) = 0, F = 1; 숯 CH = getchar가 (); 
    (! isdigit에 (CH3)) 동안 {경우 (CH2 == '-') F = -1, CH = getchar가 ();} 
    동안 (isdigit에 (CH2)) X = X * 10 + CH-'0 '편 getchar가 = (); 
    의 X *의 F를 반환; 
} 
CONST INT의 1E6 + N = 5; 
INT의 N, m; 
LL의 C [3] [N]; 
펜실바니아 V [N]; 
INT LB INT (X) {x는 -x 반환} 
공극 부가 INT (X, LL 브로, INT의 ID) 
{ 
    대 (; X <= N, X + = LB (X)) 
        C [ID] [X] + = 발, (c [ID] [X] + = 모드) % = 개조; 
} 
LL 쿼리 (INT의 X,
    LL 입술 = 0; 
    (; X, X- = LB (X))에 대한 
        (입술 + C = [ID] [X]) % = 개조; 
    창 (+ 고해상도 모드) %의 모드; 
} 
(INT의 L, R의 INT, INT의 ID) 요청 버리는 
{ 
    창 (질의 (R, ID) - 쿼리 (L-1, ID) + 개조)를 개조 %; 
} 
) (주 INT 
{ 
    N = () 판독; m = () 판독; 
    대해 INT (I = 1; i가 <= N; 내가 ++) 
    { 
        V [i]를 판독 좁은 방 = (), V [i]를 판독 .second = (); 
        추가 (I, V [i]는 좁은 방 * V [I] 좁은 방, 0); 
        추가 (I, V [i]를 .second * V [I] .second, 1); 
        추가 (I, V [i]는 좁은 방 * V [I] .second, 2); 
    } 

    동안 (M--) 
    { 
        INT 연산 =) (판독; 
        (OP == 1) 경우에 
        { 
            INT 볼때가 판독 = ();
            LL X = 판독 (), y)는 (판독 =; 
            추가 (POS의 X * XV [POS] 좁은 방 * V [POS] 좁은 방, 0); 
            추가 (POS, Y *의 YV [POS] .second * V [POS] .second, 1); 
            추가 (POS의 X * YV [POS] 좁은 방 * V [POS] .second, 2); 
            V [POS는 = X의 좁은 방을, V [POS] .second = Y; 

        } 
        경우 (연산 == 2) 
        { 
            (읽기 용 L = INT), R = 판독 (); 
            LL 입술 = 물어 (L, R, 0) * 요청 (L, R, 1) %의 개조, RES1 요청 = (L, R, 2); 
            입술 = (RES- (RES1 * RES1의 %의 개조) + 모드) %의 모드; 
            의 printf ( "% LLD \ 없음"입술); 
        } 
    } 
    0을 리턴; 
}

 

추천

출처www.cnblogs.com/Rorschach-XR/p/11610934.html