テンプレート - 最大のサブセグメントセグメントツリーのメンテナンスとSP1716 GSS3 - あなたはこれらのクエリIIIに答えることができます

$ {\ {色ピンク} {>>質問}} $

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <アルゴリズム>
 4の#include <CStringの>
 5の#include <cmath>
 6  の#define LL長い長い
 7  使って 名前空間STD。
8  
9テンプレート<型名T> 空隙 (T&X){
 10      、X = 0T F = 1チャー CH = GETCHAR()。
11      ながら(!isdigit(CH)){ 場合(CH == ' - ')、F = - 1; CH = GETCHAR();}
 12      ながら(isdigit(CH)){X = 10 * X + CH - ' 0 'CH = GETCHAR();}
 13      X * = F。
14  }
 15  
16テンプレート<型名T> 無効 アウト(T X){
 17      であれば(X < 0)のputchar(' - ')、X = - X。
18      であれば(X> 9アウト(X / 10 )。
19      のputchar(Xの%10 + ' 0 ');
20  }
 21  
22  // -------------------------------------------- ---------------- 
23  
24  のconst  int型 N = 50005 25  
26  のint N、Q、。
27  
28  構造体ノード{
 29      int型のLM、RM、全て、合計;
30 } T [N << 2 ]。
31  
32  空隙 P_up(ノード&U、ノードLS、ノードRS){
 33      u.sum = ls.sum + rs.sum。
34      u.all = MAX(MAX(ls.all、rs.all)、ls.rm + rs.lm)。
35     u.lm = MAX(ls.lm、ls.sum + rs.lm)。u.rm = MAX(rs.rm、rs.sum + ls.rm)。
36      u.all = MAX(u.all、MAX(u.lm、u.rm))。
37  }
 38  
39  ボイドビルドを(int型 U、int型、LをINT {R)
 40      場合(L == R){ における(A)T [U] .LM = T [U] .rmのT = [U] .ALL = T [U] .SUM =。リターン;}
 41      INT半ば=(L + R)>> 1 42      ビルド(U << 1、L、MID)。ビルドします(U << 1 | 1、ミッド+ 1 、R);
43      P_up(T [U]、T [U <<1 ]、T [U << 1 | 1 ])。
44  }
 45  
46  空隙 A(INT U、INT L、のint R、int型のx、int型K){
 47      であれば(L == R){T [U] .ALL = T [U] .LM = T [U] .rmのT = [U] .SUM = K。リターン;}
 48      INT半ば=(L + R)>> 1 49      であれば(X <= MID)A(U << 1、L、中間、X、K)。そうでなければ(U << 1 | 1、中間+ 1 、R、X、K)。
50      P_up(T [U]、T [U <<1 ]、T [U << 1 | 1 ])。
51  }
 52  
53節点Q(INT U、INT L、のint R、int型のx、int型のY){
 54      であれば(X <= L && Y> = R){ 戻り [U]をTは;} // 重要
55      INTミッド=(L + R)>> 1 56      であれば(Y <= MID)リターン Q(uの<< 1 、L、中、X、Y)
57      他の 場合(X>半ば)、リターン Q(U << 1 | 1、ミッド+ 1 、R、X、Y)。
58      {
 59          ノード_U、LS、RS。
60の          LS = Q(uの<< 1、L、中間、X、MID)。RS = Q(uの<< 1 | 1、中間+ 1、R、中間+ 1 、Y);
61          P_up(_U、LS、RS)。
62          リターン_u。
63      }
 64  }
 65  
66  INT メイン(){
 67      のint OP、X、Y。(N)
68      ビルド(11 、N)
69      における(Q);
70      一方(q-- ){
 71          における(OP)。(X)(Y)
72 もし A((OP!)11 、nは、X、Y)
73 アウト(Q(11、nは、X、Y).ALL)のputchar(' の\ n ' );
74     }
 75 リターン0 76 }                          

 

おすすめ

転載: www.cnblogs.com/mzg1805/p/11444574.html