#include " stdafx.h " #include <iostream> #include <vector> #include <algorithme> #include < string > #include < set > #include <file> #include <map> #include <sstream> #include < cstdio> #include <cstring> #include <numérique> #include <cmath> #include <iomanip> #include <deque> #include <bitset> // #include <unordered_set> //#include <unordered_map> // #include <bits / stdc ++ h.> // #include <xfunctional> #define ll long long #define paire PII <int, int> en utilisant l' espace de noms std; int dir [ 5 ] [ 2 = {{] 0 , 1 }, { 0 , - 1 }, { 1 , 0 }, {- 1 , 0 }, { 0 , 0 }}; const longue longue INF = 0x7f7f7f7f7f7f7f7f ; const int= INF 0x3f3f3f3f ; const double PI = 3,14159265358979 ; const int MOD = + 1E9 7. ; Const int MAXN = 2005 ; // IF (X <0 || X> Y = R & lt || <|| 0 Y> = C) / / 1000000000000000000 int a [ 200005 ]; struct noeud { int l; int R & lt; int W; } arbre [MAXN]; nul changement ( int x, int a) { // valeur de x à l'arbre de noeud modifiée [x] .W A + IF(X == 0 ) retour ; // Représentant mis à jour l' arbre [X] .W + = A; Change (X / 2 , A); retour ; } vide Construction ( int X, int gauche, int droite) { // x est le noeud de référence de courant d' arbre [x] .L = gauche; Arbre [x] .r = droite; IF (gauche == droite) { Change ([gauche] x, a); // modifier la valeur de x est un [ gauche] retour ; } construction ( 2 * X, à gauche, (gauche + droite) /2 ) Construction ( 2 * X + 1. , (Gauche + droite) / 2 + 1. , À droite); // sur chaque appels récursifs retour ; } int Ajouter ( int X, int gauche, int droite) { // intervalle de retour et IF ((référence [X] .L == gauche) && (référence [X] .r == droite)) // égal exactement, les retours W retour Arbre [X] .W; int MID = (référence [X] arbre + .L [X] .R) / 2 ; IF ( à droite <= MID) // ne peut être présent dans le fils gauche retourner le bouton Ajouter (X * 2, Gauche, droite), IF (gauche> MID) // ne peut être présent dans le fils droit retour Ajouter (X * 2 + 1. , À gauche, à droite), retourner le bouton Ajouter (X * 2 , à gauche, MID) Ajout + (X * 2 + . 1 , MID + 1. , à droite); // le cas le plus courant, encore une fois divisé en deux } int main () { int taille; CIN >> taille, pour ( int I = 1. , I <= taille; I ++ ) CIN >> A [I]; construction ( 1. ,1 , taille); int res = 0 ; pour ( int i = 1 ; i <= taille; i ++ ) { pour ( int j = 0 ; i + j <= taille; j ++ ) { si (add ( 1 , i, i + j)) res ++ ; } } Cout << res << endl; retourner 0 ; }