コード:
#include <ビット/ STDC ++ H> に#define setIO(S)freopenは(S ".IN"、 "R"、STDIN) の#define 200001をMAXN 名前空間stdを使用。 INT ARR [MAXN]、L [MAXN]、R [MAXN]、A [MAXN]、C [MAXN]。 INT CMP(INT A、INT B) { 戻りL [A] <L [B]。 } INT lowbit(INT T) { 戻りT&( - T)。 } ボイド更新(int型のx、int型デルタ) { (X <MAXN)C [X] + =デルタ、X + = lowbit(x)が、一方、 } int型の照会(INT X) { int型TMP = 0。 一方、(X> 0)TMP + = C [x]は、x軸= lowbit(X)。 TMPを返します。 } int型のmain(){ // setIO( "入力")。 N INT、M。 scanf関数( "%d個"、&n)と、 (; I <= M; ++ iは、1 = INT)のために { scanf関数( "%のD"、&A); IF(L [A]) R [A] = I。 他 L [A] = I。 } (i = 1をint型、iが<= N; I ++)のためにA [I] = iは、 ソート(A + 1、A + 1 + N、CMP)。 int型ANS = 0; (I ++; iが<= N I = 1 INT)用 { [I] INT CUR = A。 =クエリ(L [CUR]) -クエリ(R [CUR])。 ANS + = A。 アップデート(L [CUR]、1)、更新(R [CUR] - 1)。 } のprintf( "%d個の\ n"、ANS)。 0を返します。 }