#include " stdafx.hを" の#include <iostreamの> の#include <ベクトル> の#include <アルゴリズム> 書式#include < 文字列 > の#include < セット > の#include <キュー> の#include <マップ> 書式#include <sstream提供> する#include < cstdioを> する#include <CStringの> の#include <数値> の#include <cmath> の#include <iomanip> 書式#include <両端キュー> の#include <ビットセット> // する#include <unordered_set> //#include <unordered_map> // の#include <ビット/ STDC ++ H> // の#include <xfunctional> の#define LL長い長 の#define PII対<整数、整数> 使用して 名前空間STDを、 INTの DIR [ 5 ] [ 2 ] = {{ 0、1 }、{ 0、 - 1 }、{ 1、0 }、{ - 1、0 }、{ 0、0 }}。 constの 長い 長い INF = 0x7f7f7f7f7f7f7f7f 。 const int型= INF 0x3f3f3f3f ; constの ダブル PI = 3.14159265358979 、 CONST INT MOD = + 1E9 7。 、 CONST INT MAXN = 2005 ; // IF(X <0 || X> Y = R&LT || <|| 0 Y> = C) / / 1000000000000000000 INT [ 200005 ]; 構造体ノード{ int型のL; INT R&LT; INT W; }ツリー[MAXN]; ボイド変更(int型のx、int型 A){ // 変性ノードツリーのxの値[X] .W A + IF(X == 0)のリターン ; // 代表更新 ツリー[X] .W + = A; 変更(X / 2 、A); リターン; } ボイドビルド(int型 X、intは、左INT右){ // X電流基準ノードである ツリー[X] .L = 左、 ツリー[X] .R = 右; IFは(==左{右) 変化は(X、[左]); // xの修正値です[左] リターン; } ビルド(2 * X、左、()+左/右2 ); ビルド(2 * X + 1、(右+左)/ 2 + 1 、右); // 各再帰呼び出し約 返す; } int型の追加(int型 X、intは、左INT右){ // 戻りインターバルそして IF((ツリー[X] .L ==左)&&(ツリー[X] .R ==右))は// 正確に、W戻り等しく リターン[X] .Wツリー; INT MID =(ツリー[X]ツリー+ .L [X] .R)/ 2 ; IF(右<= MID)// だけ左息子に存在することができる 返すの追加(X * 2、左、右); IF(左> MID)// 唯一の右の息子が中に存在することができる 返すの追加(X * 2 + 1。)右、左を、 返すの追加(X * 2、左、MID)追加+(Xの* 2 + 1、MID + 1、右); // 最も一般的な場合、再び二分割 } int型のmain() { int型のサイズ、 CIN >> サイズ; のため(INT I = 1 ; I <=サイズ; I ++ ) CIN >> A [I]; [ビルド(1。 、1 、サイズ)。 int型のres = 0 ; 以下のために(INT iが= 1 ; I <=サイズ; I ++ ) { ため(INT J = 0 ; I + J <=サイズ; J ++ ) { 場合(ADD(1、I、I + J)) RES ++ 。 } } COUT << RES << ENDL。 返す 0 ; }