HDU1166の敵のラインナップ(セグメントツリー+テンプレート)

制限時間:1000分の2000 MS(Javaの/その他)メモリの制限:32768分の65536 K(Javaの/その他)
の合計提出(S):153138受理提出(S):63587


問題の説明
ライバル国C国の継続的な軍事演習、この時間は、国のスパイチーフCデレクと彼の男性は忙しいのTidyまで始めました。Nエンジニアリングキャンプのラインに沿って配置された国の海岸線は、デレクとTidyのタスクは、これらのエンジニアキャンプの活動を監視することです。高度な監視ツールのいくつかの種類なので、各陣営のCクリスタルクリアな把握米国でのエンジニアの数の結果として、各陣営における技術者の数は、変更を発生する可能性がある職員の数を増減することがありますが、それらはCを免れることはできません国を監視します。
「Tidyの、すぐに10の陣営の合計の多くの人々に最初の3つのキャンプを報告:デレクTidyのレポートにどのように多くの人の合計を連続エンジニアリングキャンプの一定期間を維持するように、デレクは尋ねたなど、まさに練習敵の戦術を研究するためにCIA !「Tidyのは、すぐにこの項及び報告書の合計数を計算するために開始されます。しかし、デレクはTidyの速度を計算するために敵のキャンプの数は頻繁に変更し、デレクは、各セグメントは、Tidyのはキャンプ、すぐに枯渇の数に行かなければならなかったので、毎回違う尋ねますます不満:Tidyの思想「!死んだ脂肪の少年あなた、とても遅いと考え、私はあなたを解雇」:「あなたは数学を自分で行う、本当に私はあなたがあまりにも私を解雇たい疲れる仕事です! 「絶望では、Tidyのは、ウインドブレーカー、ウインドブレーカーを支援するために、コンピュータの専門家を呼び出すためにと言いました:」!死んだ脂肪少年、あなたは通常、マルチポイントACMタイトルと呼ばれ、マルチ小数点演算ブックを参照してくださいか、今の苦い実を味わった「Tidyのは、言いました:」私は...ミスを認め「が、ウインドブレーカーは、電話を切りました。Tidyの非常に動揺し、彼は本当に、インテリジェントな読者をクラッシュをカウントしますので、あなたは彼が仕事を終える支援するプログラムを書くことができますか?あなたのプログラムの効率が十分に高くない場合でも、Tidyのはまだデレクさん叱られます。
 

 

入力
データの最初の行の整数T、Tセットが発現しました。
各正の整数N(N <= 50000)の最初の行のデータ、Nは、敵キャンプエンジニア、Nと次の正の整数を表し、iはi番目のAI開始エンジニアリングキャンプを表す正の整数をaiを有するあります個人(1 <= AI <= 50 )。
:次に、コマンドを有する各列は、コマンドは、4つの形式があり
(1)、追加のijは、iは、jは正の整数でキャンプ増加個人jのi番目(jは30以下である)である
、(2)サブIJをiとjそれは、正の整数である(jは30を超えていない)は、i番目のキャンプは、Jの個人を減らす表し;
の(3)クエリIJ、i、jは正の整数であり、私は= J <、j番目のキャンプにi番目の総数を求めるために提示します。
(4)の端部は、データの各セットに表示される最後のコマンドが終了を示し、
各データコマンド最大40,000
 

 

出力
データのi番目のグループ、第一の出力は「ケースI:」および、入力
各クエリのクエリ、キャリッジリターンと出力用セグメント内のクエリの総数を表す整数を、この数はINT内に留まります。
 

 

サンプル入力
1 10 1 2 3 4 5 6 7 8 9 10クエリ1 3 3 6クエリ2~7のSub 10 2 6 3クエリ3 10エンドを追加
 

 

サンプル出力
ケース1:6 33 59
 
 
シングルポイントの加算、減算、加算間隔
1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3  
4  のconst  int型 MAXN = 5E4 + 5 5  INT [MAXN]、ST [MAXN << 2 ]。
6  
7  ボイド押し上げ(INTのルート)/// 根节点更新操作
8  {
 9      ST [ルート] = ST [ルート<< 1 ] + ST [ルート<< 1 | 1 ]。
10  }
 11  
12  空隙ビルド(int型 L、int型の R、int型の根)/// 建树操作
13  {
 14      場合(lは== R)
 15      {
 16          ST [ルート] = [L]を、
17          リターン;
18      }
 19      INT半ば=(L + R)>> 1 20      ビルド(L、中間、ルート<< 1 )。
21      ビルド(ミッド+ 1、R、根<< 1 | 1 );
22      押上(ルート)。
23  }
 24  
25  ボイド更新(int型の POS、INTヴァル、int型の L、INTの R&LT、INTルート)/// 更新操作、POS:更新する位置、ヴァル:更新される値
26は {
 27      IF(POS <= L && POS> = R&LT)
 28      {
 29          [ルート] + = ST のVal、
 30          リターン31である     }
 32      INT >> MID =(L + R&LT)。1 ;
 33で     IF(POS <= MID)アップデート(POS、ヴァル、L、MID、ルート<< 1。 )、
 34は     他の更新(POS、ヴァル、MID + 1。、R&LT、ルート<< 1 | 1 );
 35      上げ底(ルート);
 36  }
 37 [ 
38は INTクエリ(INT L、INT R&LT、int型の L、INT R&LT、INTルート)/// クエリ、L:左の境界クエリ、R:右境界クエリ
39  {
 40      IF(L <= R&LT && L> = R&LT)リターンST [ルート];
 41である     INT MID =(L + R&LT)>> 1。、RES = 0 42で     IF(L <= MID)= RES +クエリ(Lは、R、L、MID、ルート<< 1。);
 43れる     IF(R&LT> MID)= RES +クエリ(L、R&LT、MID + 1は、R、根<< 1 | 1 );
 44は     押し上げ(ルート)
 45      リターン解像度;
46  }
 47  
48  のint main()の
 49  {
 50      チャー S [ 10 ]。
51      int型、T、N、X、Y、CA = 0 52      のscanf(" %dの"、&T)。
53      一方(t-- 54      {
 55          のintフラグ= 0 56          のscanf(" %d個"、&N)
57          のためにint型 i = 1 ; iが<= N; iが++ 58          {
 59              のscanf(" %dの"、および[I])。
60          }
 61          のmemset(ST、0はsizeof ST)。
62          ビルド(1、nは、1 )。
63          一方(scanf関数(" %sの"、S)のstrcmp(S、" 終了" ))
 64          {
 65              のscanf(" %d個の%のD "、およびX&Y)。
66              もし(strcmpの(S、問合せ")== 0 67              {
 68                  であれば(フラグ== 0 69                  {
 70                      のprintf(" ケース%D:\ n "++ CA);
 71                      フラグ= 1 ;
 72                  }
 73                  のprintf(" %Dの\ nを"クエリ(X、Y、1、nは、1 ));
 74              }
 75              そう であれば(strcmpの(S、" 追加")==0 76              {
 77                  更新(X、Y、1、nは、1 )。
78              }
 79              そう であれば(strcmpの(S、" サブ")== 0 80              {
 81                  更新(x、-y、1、nは、1 )。
82              }
 83          }
 84      }
 85 }

 

 

おすすめ

転載: www.cnblogs.com/ChangeG1824/p/11502598.html