件名の説明:
子バースト競争を回避する方法で、ウォーキングツアーなどのフローラ国。フローラは、ツアーのルートを持っている、それはそれはすべてが線配置の形で国を旅し、それぞれの国が(もちろん、神は、必ずしもすべての国を過ごすのが好きではありません)程度のような神を過ごすために持っている、と言うことです、線形です。
すべての旅行は、神が旅を幸せにもたらし、いくつかのために連続している、それは国の束だった、観光ルートを過ごすことを選ぶだろうこれらの国の神の花のように、当然のことながら、これらの国々でのお気に入りの和でありますプログラムは、特定の国に時々突然嫌悪一定ではないので、彼はこれらの国々に好きδすることになり√ δを(おそらくフローラの子供が退屈、これらの国でOIバースト) 。
フローラは今片道値フロールを要求して幸せ各旅程だけでなく、楽しみの度合いの変化を、与えられています。
入力フォーマット:
整数である最初の行N、それが発現されるN個の国と、
スペースで区切られたN個の整数の第2行、など各国の初期を示し、
第三行は整数であり、Mは存在表すM個の処理対象の情報が;
第4行の最後に、整数のような3の各列X、L、R、場合X = 1、すなわち、国楽しい値Rを走行xの和を求めたとき、Σ [デルタ] I(R〜L) 、場合X = 2以下のような各国のときに状態LとR δ:私はなる√ [デルタ] I。
出力フォーマット:
各X = 1、整数1行に1つずつ。旅のハッピー表現。
例:
サンプル入力:
4
1 100 5
5
1 1 2
2 1 2
1 1 2
2 2 3
1 1 4
出力例:
101
11
11
データ範囲とヒント:
すべてのデータについては、1≤n≤10 。5、1≤m≤2×10 5、1≤l≤r≤n、0≦ δ:私は 10≦ 9。
注:これは、使用することをお勧めしSQRT関数、および切り捨て。
話題の意味:ツリーライン区間、区間合計で開かれました。
ソリューション:
セクション情報は遅延マークを使用しないで、すぐに更新されません。(ひどいです)
しかし、10ということに注意してください9開いて最大5倍に変更します
0または1の電流範囲は、戻り時にすでにいっぱいになるまでので、各変更暴力が再帰的に続け
それはとてもハンサムではないでしょうか?
コードの時間:
#include <ビット/ STDC ++ H> の#define L(x)は、x << 1 の#define R(x)は、x << 1 | 1 使用して名前空間std。 N INT、M。 長い長いV [100001]。 長い長いTRSUM [400001]、TRMAX [400001]。 ボイド押し上げ(INT X) { TRSUM [X] = TRSUM [L(X)] + TRSUM [R(X)]。 TRMAX [X] = MAX(TRMAX [L(X)]、TRMAX [R(X)])。 } ボイドビルド(int型のx、int型、L、R INT) { IF(L == R) { TRSUM [X] = TRMAX [X] = V [L]。 返します。 } INT半ば=(L + R)>> 1。 ビルド(L(x)は、L、MID)。 ビルド(R(x)は、中間+ 1、R)。 突き上げ(X)。 } ボイド変化(int型のx、int型のL、int型のR、int型のL、R INT) { IF(L == R) { TRSUM [X] = SQRT(TRSUM [X])。 TRMAX [X] SQRT(TRMAX [X])を=。 返します。 } IF(TRMAX [X] <= 1)リターン; //注意这里为≤、其他跟普通线段树别无两样 INT半ば=(L + R)>> 1。 IF(L <= MID)変化(L(x)は、L、中、L、R)。 IF(R> MID)変化(R(x)は、中間+ 1、R、L、R)。 突き上げ(X)。 } 長い長い尋ねる(int型のx、int型のL、int型のR、int型のL、int型R) { IF(L <= 1 && R <= R)戻りTRSUM [X]。 INT半ば=(L + R)>> 1。 長い長いREC = 0; IF(L <= MID)REC + =尋ねる(L(x)は、L、中、L、R)。 IF(R> MID)REC + =(R(x)は、中間+ 1、R、L、R)を尋ねます。 REC返します。 } int型のmain() { scanf関数( "%のD"、&N); 以下のために(INT i = 1; iが<= N; iは++) scanf関数を( "%のLLD"、&V [I])。 scanf関数( "%のD"、&M)。 int型のOP、L、R。 scanf関数( "%D%D%D"、&OP、&L&R)。 (OP == 1)のprintf( "%LLDする\ n"は、(1,1、N、L、R)を尋ねる)場合。 他の変化(1,1、N、L、R)。 } 0を返します。 }
CPP
RP ++