[フェンウィックツリー] P1972 [SDOI2009] HHネックレス

  1の#include <iostreamの>
   2の#include < ストリング >
   3の#include <キュー>
   4の#include <積層>
   5の#include <ベクトル>
   6の#include <地図>
   7の#include <cstdioを>
   8の#include <cstdlib>
   9# <アルゴリズム>含む
 10の#include < 設定 >
 11の#include <iomanip>
 12の#include <CStringの>
 13の#include <cmath>
 14の#include <限界>
 15  使用 名前空間STDを、
16  
17  の#define自己を持っています
18  の#defineデバッグ(I)COUT << "デバッグ:" << I << ENDL
 19  の#define mfor(I、B)(iは=(A)がINTレジスタiが++; iが=(B)<)のため
 20  の#define(I、B)(; I> =(B)i-- iは=(A)がINTレジスタ)のためMREP
 21  の#define LLL __int128
 22  の#define再登録
 23  の#define ILインライン
 24  の#defineを MEM(A、B)のmemset((B)はsizeof(A))
 25のtypedef対< INTINT > intpair。
26 typedefの長い 長い int型のLL;
27  のconst  int型 INF =0x3f3f3f3f ;
28  のconst  int型 INFLL = 0x3f3f3f3f3f3f3f3f 29  
30  INT N。
31  のconst  int型 MAXN = 1000010 32  INT [MAXN]。
33  int型TR [MAXN]。
34  
35インラインINT lowbit(INT X)
 36  {
 37      リターン X&( - X)。
38  }
 39  
40インラインボイドアップデータ(int型のx、int型K)
41  {
 42      ながら(X <= N)
 43      {
 44          TR [X] + = K。
45          X + = lowbit(X)。
46      }
 47  }
 48  
49インラインINT get_sum(INT X)
 50  {
 51      int型のRES = 0 52      一方(X> 0 53      {
 54の          RES + = TR [X]。
55          X - = lowbit(X)。
56      }
57      リターンのres;
58  }
 59  
60  構造体クエリー
 61  {
 62      のint L、R。
63は     int型のI;
64      ブール 演算子 < (クエリS)
 65      {
 66          リターン R < SR。
67      }
 68  } Q [MAXN]。
69  
70  のint M。
71  int型のマーク[MAXN]。
72  INTは[MAXN] ANS。
73  
74  のint main()の
 75  {
 76     イオス:: sync_with_stdio(0 );
77      cin.tie(0 )。
78      cout.tie(0 )。
79      CIN >> N。
80      mfor(I、1、n)がCIN >> [I]。
81      CIN >> M。
82      mfor(I、1 、m)の
 83      {
 84          CIN >> Q [i]は.L >> Q [i]は.R。
85          Q [i]は.I = I。
86      }
 87      ソート(Q + 1、Q + 1 + M)。
88     int型 NXT = 1 ;
89      mfor(I、1 、m)の
 90      {
 91          mfor(J、NXT、Q [i]は.R)
 92          {
 93              であれば(マーク[J])アップデータ(マーク[J]、 - 1 );
94              アップデータ(J、1 )。
95              マーク[J] = J。
96          }
 97          NXT = Q [i]が.R + 1 98の          ANS [Q [i]は.I] = get_sum(Q [i]が.R) - get_sum(Q [i]が.L - 1 )。
99      }
 100      mfor(I、1、m)とCOUT << ANS [I] << ENDL。
101      戻り 0 ;
102 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/thjkhdf12/p/11654033.html