重量[ツリーライン]

単純なテンプレートの質問。

また、私の心は非常に良好ではなかったので、それを覚えて忘れて覚えています。

羅バレー1168

#include <iostreamの>
する#include <cstdioを>
する#include <cmath>
の#include <CStringの>
する#include <アルゴリズム>
名前空間STDを使用して、
CONST int型N = 1E5 + 5。
int型のn;
[N]、B [N] INT。
構造体ツリー
{
int型のL、R、ミッド。
int型NUM;
}ツリー[N << 2]。
読み取りINT()
{
チャーC = GETCHAR(); int型NUM = 0。
用(;!isdigit(C)と、c = getchar関数());
用(; isdigit(C); C = GETCHAR())
NUM = NUM * 10 + C-'0' 。
NUMを返します。
}
ボイドビルド(INT根、int型のL、R INT)
{
ツリー[ルート] .L = L、木[ルート] .R = R、ツリー[ルート] .MID = L + R >> 1。
(L == R)であれば
リターン。
(ルート<< 1、L、木[ルート] .MID)を構築します。
(ルート<< 1 | 1、ツリー[ルート] .MID + 1、r)を構築します。
}
ボイド更新(INT根、INT X)
{
++ツリー[ルート] .nu​​m。
IF(ツリー[ルート] .L ==ツリー[ルート] .R)
リターン。
IF(X <=ツリー[ルート] .MID)
更新(根<< 1、X)。
他の
更新(ルート<< 1 | 1、x)は、
}
INTクエリ(INT根、int型NUM)
{
IF(ツリー[ルート] .L ==ツリー[ルート] .R)
リターン・ツリー[ルート] .L。
IF(NUM <=ツリー[ルート<< 1] .nu​​m)
リターン(クエリ(根<< 1、NUM))。
他の
リターン(クエリ(ルート<< 1 | 1、NUM-ツリー[ルート<< 1] .nu​​m));
}
)(INTメイン
{
)(N =読み取ります。
以下のために(; iは= N <; I = int型1 ++ I)
[I] = B [i]は、read()は= [I]。
ソート(B + 1、B + N + 1)。
int型のユニークな=バウンド(B + 1、
(1,1、N)を構築します。
以下のために(; iは= N <; I = int型1 ++ I){
int型のPOS = LOWER_BOUND(B + 1、B +は+ 1、[I]結合) - B。
アップデート(1、POS)。
IF(I%2)
のprintf( "%d個の\ n"、B [クエリ(1、I / 2 + 1)])。
}
0を返します。
}

おすすめ

転載: www.cnblogs.com/hgangang/p/11518468.html