3つのステップを殺します

SのOのL U T I O N

ステップ1

テストSBはXORを考えるとき......

まず、複雑さは間違いなく線形である、または満たすことができません。

ステップ2

操作の単一のポイントに差が考慮レンジ動作、。

場合は、  S = E  、常微分です

そうでない場合、つまり、差がプラス各配列の同じ数は、差動配列を維持するために、差分配列を考えます。

毎回プラス許容差、最終統計。

変更  O(1 )、統計的  O(N)を 、耐えることができます

ステップ3

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
長い 長い和[ 10000005 ]、D [ 10000005 ]。
テンプレート <型名T> ボイドリード(T&X){
     int型の F = 1 ; X = 0チャー C = GETCHAR()。
    (;!isdigit(C)と、c = getchar関数())の場合(C == ' - ')= F!F;
    (; isdigit(C); C = GETCHAR())X = X * 10 + C- ' 0 ' 
    X * = F。
}
INT N-、M、L、R&LT;
 ロング ロング S、E、A [ 10000005 ];
 int型のmain(){
 //   freopenは( "sequence.in"、 "R&LT"、STDIN);
 //   freopenは(「sequence.out "" W」、STDOUT); 
    リード(N-);リード(M);
     一方(M-- ){ 
        読み取り(L);リード(R&LT)、リード(S);リード(E); 
        ロング ロング GC = (ES)/(R- L); 
        D [L用 + 1 ] + = GC; D [R&LT + 1 ] - = GC; // 最後のアイテムプラス公差に対する第2の相違点アレイ差アレイ 
        和[L ] + = S; SUM [R&LT + 1 ] - = E; // 自体が変更アレイの両端の差
    }
     ためINT= I 1、I <= N; Iは++ 
     SUM [I] + =(D [I] D = + [I- 1 ]); // 統計的差異アレイ
    ロング ロング ANS = 0、TMP = 0、MX = 0 ;
     のためにint型私は= 1。 ; I <= N-;私は++)ANS ^ =(TMP + = SUM [I])、MX = MAX(MX、TMP); // 元の配列を数える 
    のprintf(" %のLLDの%のLLD " 、 、MX)ANS;
     戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/coder-cjh/p/11621759.html