https://codeforc.es/contest/1208/problem/D
私もスポット555でそれを書いていないセグメントツリーの1からn個の接頭語にメンテナンスや、最初の接頭辞からの問合せやAIより大きく前進位置した後、簡単なツリーライン
1つの#defineバグ(X)COUT <<#1 X << "で" << X << ENDL 2の#define IOのstd :: IOS :: sync_with_stdio(0 ) 3の#include <ビット/ STDC ++。H> 4 の#define ITER ::イテレータ 5の#define PAペア< int型、LL> 6 std名前空間を使用しました。 7の#defineっ長い 長 8 の#define MK make_pair 9 の#define PB一back 10 の#define SE第 11 の#define Fiの最初の 12件の#define LS O << 1つの 13 Oの#define RS << 1 | 1つの 14のLL MOD = 998244353 。 15 のconst INT N = 2E5 + 5 。 16 [N] LL。 17 LLのMX [N * 4]、LZ [N * 4 ]。 18 ボイドダウン(INT O){ 19 であれば(LZ [O]){ 20 MX [LS] + = LZ [O]。 21 MX [RS] + = LZ [O]。 22の LZ [LS] + = LZ [O]。 23の LZ [RS] + = LZ [O]。 24 [O] = 0 LZ 。 25 } 26 } 27 空隙アップ(INT、O INTの L、INT R、INT QL、INT QR、LL V){ 28 場合(L> = QL && R <= QR){ 29 MX [O] + = V。 30の LZ [O] + = V。 31 リターン; 32 } 33 INT M =(L + R)/ 2 。 34 ダウン(O) 35 であれば(QL <= M)まで(LS、L、M、QL、QR、V)。 36 であれば(QR> M)まで(RS、M + 1 、R、QL、QR、V)。 37 MX [O] = MAX(MX [LS]、MX [RS])。 38 } 39 INT QU(INT O、int型の L、int型のR、LL V){ 40 // のprintf( "L =%のDR =%dの和=%d個の\ n"、L、R、和[O])。 41 であれば(L == R)戻りL。 42 int型 M =(L + R)/ 2 。 43 ダウン(O) 44 場合(V> = MX [LS])を返す QU(RS、M + 1 、R、V)。 45 リターンQU(LS、L、M、V)。 46 MX [O] = MAX(MX [LS]、MX [RS])。 47 } 48 INT N。 49 int型B [N]。 50 INT メイン(){ 51 IO。 52 CIN >> N。 53 のための(int型i = 1; iは= <N; iは++ ){ 54 CIN >> [I]。 55 } 56 のLL H = 0 。 57 のためには、(int型、iがn = <; I = 1 iは++ ){ 58個の H + = I。 59 アップ(1,1 、N、I、I、H)。 60 } 61 のための(int型 I = N; iは> = 1; i-- ){ 62 LL X = [I]。 63 INT RES = QU(1,1 、N、X)。 64件の B [i]は=のRES。 65 アップ(1,1、N、B [i]は、N、 - B [I])。 66 } 67 のために(int型 ; iが<= N I ++は、I = 1 ){ 68 COUT << B [i]は<<」 " 。 69 } 70 } 71 / * 72 5 73 0 1 1 1 10 74 / *