題目:
題目分析:要保證兩對數滿足前面的大於後面的,第一對數的下標中較大的小於第二對數中下標較大的,那麼我們可以利用字首和和字尾和的思想,先預處理算出每乙個數的字首中比它小的數的個數,再計算出字尾中比它大的個數,利用樹狀陣列可以快速求取,然後對前面的數取字首和,也就是以它為較大數的所有數對的個數,列舉比它大的數中字尾的個數,相乘就是結果,具體實現詳見**:
**如下:
#include #include #include #include #define max 100007
using namespace std;
int n;
int c[max];
int a[max];
int les[max];
int more[max];
int lowbit ( int x )
void add ( int x , int d )
}int sum ( int x )
return rt;
}int main ( )
memset ( c , 0 , sizeof (c ) );
for ( int i = n ; i >= 1 ; i-- )
memset ( c , 0 , sizeof ( c ) );
long long ans = 0;
long long sum = 0;
for ( int i = 1 ; i <= n ; i++ )
printf ( "%lld\n" , ans );}}
字首和 與 樹狀陣列
通常情況下,樹狀陣列可用來處理單點修改,區間查詢。通過字首和的轉換,可以使其處理區間修改和單點查詢。考慮原陣列和字首和陣列 修改原陣列的某個點 i 等價於 修改字首和陣列 的一條線段 1 i 都要修改 查詢原陣列的某條線段 1 i 等價於 查詢字首和陣列的乙個點 i 這樣,適當地處理字首和陣列和原陣...
字首 樹狀陣列
具體見 1 include 2 using namespace std 3 typedef long long ll 4 const int maxn 1e5 10 5 const int mod 1e9 7 6 define rep i,first,second for int i first i...
字首和 差分 樹狀陣列 線段樹
字首和 應用 區間查詢,不涉及數的變化。求區間 l,r d的和 一維字首和 s i a 1 a 2 a i s i s i 1 a i 二維字首和 s i j 第 i 行第 j 列格仔左上部分所有元素的和 以 x1,y1 為左上角,x2,y2 為右下角 s x2,y2 s x2,y1 1 s x1 ...