【問題描述】
給定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技術俱樂部主席競選 那道題其實就是很好的應用。有些資料本身很大,自身無法作為...