Modèle de code (nouveau)

1. Arborescence: Titre: UVA1428

1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include < string >
 5 #include <cstring>
 6 #include <numeric>
 7 #include <vector>
 8 #include <map>
 9 # inclure <queue>
 10 #include < set >
 11 #include <cmath>
 12  using  namespace std;
13 typedef long  long ll;
14 paires typedef < int , int > PII;
typedef pair <ll, ll> PLL;
 16  
17  // L' indice de l'arborescence et l'arborescence des segments de ligne sont identiques. Les indices commencent à 1. . . Cela ne doit pas aller mal. . . 
18  
19  const  int maxn = 1e5 + 10 ;
 20  
21  int tree [maxn + 10 ]; // Arborescence. . . 
22  int l [maxn + 10 ], r [maxn + 10 ];
 23  
24  int lowbit ( int x) { // Résoudre la position du dernier 1 dans un nombre binaire. . . 
25      return x & ( -x);
 26  }
 27  // La somme de l'arborescence est différente de l'arborescence de lignes, et la somme de l'arborescence peut être ajoutée et soustraite à chaque fois. . .
28  
29  int sum ( int x) { // Notez que x est l'index de l'arborescence. . . 
30      int res = 0 ;
 31      while (x> 0 ) { // Trouver la valeur de seulement le dernier 1 via lowbit, il suffit de déterminer l'existence du binaire 1 puis de continuer l'opération de traversée. . . 
32          res + = arbre [x];
 33          x- = lowbit (x); // ex: x = 7 Ensuite, ajoutez 6 après cela, ajoutez 4 après cela, puis x est 0, sortez de la boucle. . . Mettez fin à l'opération. . . 
34      }
 35      return res; // Trouvez directement la somme. . 
36  }
 37  
38  void add ( int x, int d) { //Cette étape consiste à augmenter l'opération. . . L'opération va de la racine de l'arborescence vers le haut. . . 
39      while (x < maxn) {
 40          arbre [x] + = d; // Ajouter le nœud actuel. . . Il est ajouté de bas en haut. . . 
41          x + = lowbit (x); // x est l'indice de l'arbre. . . 
42      }
 43  }
 44  
45  // l [i], r [i] enregistre le nombre de chiffres plus petit que les chiffres à la position i. . . 
46  
47  int main () {
 48      int T;
 49      cin >> T;
 50      ll ans;
 51      while (T-- ) {
 52          int a [maxn];
 53          int n;
 54         cin >> n;
55          pour ( int i = 1 ; i <= n; i ++ ) {
 56              cin >> a [i];
57          }
 58          memset (arbre, 0 , sizeof (arbre));
59          memset (l, 0 , taille de (l));
60          pour ( int i = 1 ; i <= n; i ++ ) {
 61              l [i] = sum (a [i]);
62              ajouter (a [i], 1 ); // 个数 均 加 一
63          }
64          memset (arbre, 0 , sizeof (arbre));
65          memset (r, 0 , taille de (r));
66          pour ( int i = n; i> = 1 ; i-- ) {
 67              r [i] = sum (a [i]);
68              ajouter (a [i], 1 );
69          }
 70          ans = 0 ;
71          pour ( int i = 2 ; i <n; i ++ ) {
 72              ans = ans + l [i] * (nr [i] -i) + r [i] * (i- 1 -l [i]);
73          }
 74          cout << ans << endl;
75      }
 76  
77      renvoie  0 ;
78 }
Afficher le code

 

Je suppose que tu aimes

Origine www.cnblogs.com/zb121/p/12727719.html
conseillé
Classement