Ligne de l'arbre requête et

#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 ; 
}

 

Je suppose que tu aimes

Origine www.cnblogs.com/dealer/p/12669134.html
conseillé
Classement