inv 線段樹,逆序對,離散化

2021-08-09 22:54:11 字數 1345 閱讀 2045

【問題描述】

給定n,以及a1,a2,……an,求所有的數對(i,j)同時滿足:

(1) i<j

(2) 2ai>aj

【輸入檔案】

輸入檔案 inv.in第一行n

接下來n行,每行乙個整數,第i行的整數為ai

【輸出檔案】

輸出檔案inv.out包含一行乙個整數,表示滿足條件的數對的個數

【輸入樣例】

3 4 6 8

【輸出樣例】

2 【樣例說明】

數對為(1,2),(2,3)

【資料規模】

n≤100000

1≤ai≤10n,且所有ai兩兩不同

30%資料n≤1000

50%資料n≤10000

注意:

輸出的大小可能會超過32位整數

題解:線段樹逆序對模板,資料大,離散。

#include

#include

#include

#define n 100005

#define lsn x+x

#define rsn x+x+1

#define lss l,mid

#define rss mid+1,r

using

namespace

std;

typedef

long

long ll;

inline

int read()

while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();

return x*f;

}void write(ll x)

int n,m,a[n],b[n],num[2*n],t[8*n];

ll ans=0;

inline

void init()

sort(num+1,num+1+n+n);

m=unique(num+1,num+1+n+n)-num-1;

for(int i=1;i<=n;i++)

}void change(int x,int l,int r,int p)

int mid=(l+r)/2;

if(p<=mid) change(lsn,lss,p);

else change(rsn,rss,p);

t[x]=t[lsn]+t[rsn];

}int find(int x,int l,int r,int s,int e)

int main()

write(ans);

return

0;}

線段樹 離散化 求逆序對數目

題目如下 第三題 lyp 的密碼 lyp 題目描述 眾所周知,lyp 喜歡以用各種方式折磨別人為樂,這次,他趁 wars 不在時在他的電腦上 掛了一把神奇的鎖,這把鎖需要一串巨長無比的數字密碼才可以解開,這 個密碼由 lyp 自 己保管,這樣 wars 就沒法 kingdom rush 了。但 wa...

離散化 線段樹

題目 分析 每次1操作會往序列底加first個second,first 和 second 都是最大1e9的資料,每次2操作詢問序列中第first到第second個數的和 一開始就感覺有點像線段樹,輸入資料太大我們可以離線處理把資料離散化下,然後扔到線段樹上,維護兩個陣列 sum 區間數的值的和 nu...

資料離散化 線段樹

前言 遇到了乙個矩形面積堆疊的問題,想了很久。終於找到了方法。先做個小記,待到具體問題時再分析。資料離散化 高大上的名字,其實就是對資料的一種處理,也可以採取陣列 或者 容器 map vector。之類的來儲存。之前的ibm技術俱樂部主席競選 那道題其實就是很好的應用。有些資料本身很大,自身無法作為...