#include <iostreamの> する#include <cstdioを> する#include <アルゴリズム> の#include <CStringの> 使用して 名前空間をSTD。 typedefの長い 長いLL。 CONST INT N = 5E5 + 10 。 int型のn; int型[N]と、 INT TR [N]。 INT B [N]。 int型のC [N]。 INT lowbit(INT X) { 戻り X& - X。 } ボイド追加(int型のx、int型のC) { 用(INT I = X; I <= N; I + = lowbit(I)) TR [I] + = C。 } int型の和(INT X) { int型 RES = 0 。 用(int型 ; I、I = I = X lowbit(I)) RES + = TR [I]。 リターンのres; } INT )(主 { 一方(CIN >> N、N) { ため(INT iは= 1 ; iが<= N; I ++ ) { CIN >> [I]。 B [i]は =[I]; } // 終了位置 替え(B + 1、bは+ 1 + N-); // 、cは、次に配置Bの要素のA位置 // A 1〜n個の要素が位置にあるべきです // 等価離散化 するための(INT I = 1 ; I <= N-I ++ ) C [I] = LOWER_BOUND(B + 1、B +は1。 - + N-、A [I])B; のmemset(TR、0、はsizeof TR); LL ANS = 0 ; のための(INT I = 1 I <= N; I ++) { (c [i]は、追加1 )。 ANS + = I- 和(C [I])。 } COUT << ANS << ENDL。 } }