アルゴリズムコンテストエントリー古典LA 4329(フェンウィック木)

質問の意味

  人々の行は、異なる容量値が一致を有する、シリアル番号が2つだけの間に二人の間、だけスキルレベルの審判を処方することができます

問題点

  

「アルゴリズムコンテストエントリークラシック - トレーニングガイド」の分析:


 

コードには

  

1の#include <iostreamの>
 2の#include <CStringの>
 3  使用して 名前空間STDを、
4  
5  のconst  int型 MAXA = 100000 + 10 6  CONST  INT MAXN = 20000 + 10 7  
8  INT [MAXN]。
9  INTのビット[MAXA]。
10  INT C [MAXN]。
11  int型D [MAXN]。
12  INT N。
13の 長い 長いANS。
14  int型 lowbit(INT X)
 15  {
 16      リターン X&( - X)。
17  }
 18  int型の和(INT X)
 19  {
 20      のint RET = 0 21      一方(X> 0 22      {
 23          RET + = ビット[X]。
24          X - = lowbit(X)。
25      }
 26      リターンRET。
27  }
 28  空隙更新(INT X)
 29  {
 30     一方、(x <= maxa- 1 31      {
 32          ++ ビット[X]。
33          X + = lowbit(X)。
34      }
 35  }
 36  のint main()の
 37  {
 38の     // IOS :: sync_with_stdio(偽)。
39      int型のT;
40      // cinを>>トン。
41      のscanf(" %dの"、&T)。
42      一方(t-- 43      {
 44          のANS = 0 45         memsetの(ビット、0はsizeof (ビット))。
46          のmemset(C、0はsizeof (c)参照)。
47          CIN >> N。
48          のためにint型 i = 1 ; iが<= N iが++ 49          {
 50              // CIN >> [I]。
51              のscanf(" %dの"、および[I])。
52          }
 53          のためのint型 I = 1 ; I <= N- 1、I ++ 54          {
55個の              C [I] = SUM([I] - 1 )。
56              更新([I])。
57          }
 58          のmemset(ビット、0はsizeof (ビット))。
59          のmemset(D、0はsizeof (d)参照)。
60          のためには、int型 I = N; I> = 2 ; i-- 61          {
 62              のD [i]は= SUM([I] - 1 )。
63              更新([I])。
64          }
 65          のためにINT I = 2 ; I <= N-1 ; I ++ 66              ANS + = C [I] *(NID [I])+(IC [I] - 1)* D [i]は、
67          coutの<< ANS << てendl;
68  
69      }
 70      リターン 0 71 }

 PS:

  初心者ING、ひどく書かれました。純粋に個人的な使用のために

おすすめ

転載: www.cnblogs.com/Crossea/p/11295661.html