割り当てられたタスクを完了した後、西は、楼蘭の古代都市の314西に来ました。
伝説によると、昔、この土地に(それ以前楼蘭の古代都市よりは)2つの部族、部族の崇拝ナイフ(「V」)、部族の礼拝スペード(「∧」)を住んでいた、と彼らが表現するためにV字状とした∧それぞれの部族のトーテム。
以下Kroraina 314にウエスト巨大壁画を発見し、点Nと垂直位置の水平方向の位置を測定することにより求めた点Nを、標識された壁画は、ペアワイズ互いに素です。
N点の相対位置と壁画に含まれる情報は、したがって座標が提供される可能性があること西314 (1 、Y 1 )、(2 、Y 2 )、... 、(N- 、Y N - )(1 、Y1)、(2、Y 2 )、...、(N、YN)、 前記Y 1 Y 1〜Y n個乃至Ynはnに1に配置されています。
314西は壁画がトーテムの番号が含まれて勉強するつもりです。
三点場合(I 、Y I )、(J 、Y J )、(K 、Y K )(I、イ)、(J、YJ)、(K、YK)を満たす。1 ≤ Iは< J < Kを≤ N とY I > Y J 、Y J < Y K 1≤i<J <K≤n及びYI> YJ、YJ <YK、Vは三点がトーテムを構成すると言われています。
三点場合(I 、Y I )、(J 、Y J )、(K 、Y K )(I、イ)、(J、YJ)、(K、YK)を満たす。1 ≤ Iは< J < Kを≤ N 及びY Iが< Y J 、Y J > Y Kを 1≤i<J <K≤n及びYI <YJ、YJ> YK、トーテムと呼ばれる3つのドット∧。
314西は2つの部族のトーテムにn個の点の数を知りたいです。
そのため、あなたは数および∧Vの数を見つけるためのプログラムを記述する必要があります。
入力形式
最初の行番号n。
2行目を表す数NであるYを1 、Y 2 、... 、Y N- Y1、Y2、...、Ynの。
出力フォーマット
番号とV∧の数続く中間領域によって分離された2つの数字、。
データ範囲
すべてのデータについては、N- ≤ 200000 n≤200000、および出力が回答int64型を超えることはありません。
サンプル入力:
5
1 5 3 2 4
出力例:
3 4
溶液:1から〜Nアレイleftdownにレコードの現在の数よりも少ないアレイleftupのレコードの数の現在の値よりも大きい順序を逆に再度ダウン求めます。同様に、nは1〜再び要求数から逆の順序に対しては、アレイrightdownにレコードの現在の数よりも少ないアレイrightupに現在のレコードよりも大きいです。その後、再びアレイ、現在の中心点値、量「V」、すなわち、横断するのみ必要(leftup電流値よりも大きい数の前の数を[I] *現在の後部rightupより大きい値[I])。同様に「^」の数を求めています。
書式#include <iostreamの> の#include <cstdioを> 使用して名前空間はstdを、 typedefの長い長いLL。const int型 MAXN = 2E5 + 7 。int型のn; int型ARR [MAXN]、ツリー[MAXN]。 LL leftup [MAXN]、rightup [MAXN]、rightdown [MAXN]、[MAXN] leftdown。INT lowbit(INT X){ 戻り X&( - X)。 } (ASK llの整数X){ LL RES = 0 。 一方、(X> = 1 ){ RES + = ツリー[X]。 X - = lowbit(X)。 } 戻りRESと、 } ボイド追加(INT X){ 一方(X <= N){ ツリー[X] ++ ; X + = lowbit(X)。 } } int型のmain(){ scanf関数(" %のD "、&N) 以下のために(int型 i = 1 ; iが<= N; iが++ ){ scanf関数(" %のD "、およびARR [I])。 } のために(int型 I = 1 ; I <= N。私は++ ){ leftdown [I] =(ASK ARR [I] - 1 )。 [I] leftup =(n)を尋ねる- (ARR [i])と尋ねます。 追加(ARR [I])。 } のために(int型 i = 1 ; iがn = <; iは++ ){ ツリーを[I] = 0 ; } のために(int型 I = N; I> = 1 ; i-- ){ rightdownは、[I] =尋ねる([I] ARRを- 1 )。 rightup [I] =(n)を尋ねる- 尋ねる(ARR [I])。 追加(ARR [I])。 } LL ANS1 = 0、ANS2 = 0 。 以下のために(int型 i = 1 ; iが<= N; iは++ ){ ANS1 + = leftup [I] * rightup [I]。 ANS2 + = leftdown [I] * rightdown [I]。 } COUT << ANS1 << " " << ANS2 << ENDL。 リターン 0 ; }