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 ; }