題意:這題解法不唯一,我剛學線段樹,就直接上線段樹了,一般來說求逆序對,對序列離散化,然後對於原序列找出每個元素對應位置,然後依次放入線段樹中,查詢1-i-1區間,可以找出比a[i]小的資料數,然後用一共比它小的數減去這個資料,即為逆序對;
#include#include#include#include#include#include#include#include#include#define n 1000005#define p 1000000007
using namespace std;
typedef struct list list;
list b[4*n];
void built(int root,int first,int end)
int mid=(first+end)/2;
built(root*2,first,mid);
built(root*2+1,mid+1,end);
b[root].x=b[root*2].x;
b[root].y=b[root*2+1].y;
b[root].date=0;
}void u(int root,int first,int end,int e)
int mid=(first+end)/2;
if(e<=mid) u(root*2,first,mid,e);
else u(root*2+1,mid+1,end,e);
b[root].date=b[root*2].date+b[root*2+1].date;
}long long sum=0;
void q(int root,int first,int end,int l,int r)
int mid=(first+end)/2;
if(l<=mid) q(2*root,first,mid,l,r);
if(r>mid) q(2*root+1,mid+1,end,l,r);
}int a[n];
int d[20];
long long e[n];
int main()
memset(e,0,sizeof(e));
for(int j=0; j<=9; j++)
} built(1,0,9);
long long ans=0;
for(int j=1; j<=n; j++) else
} printf("%lld\n",ans);
} return 0;
}
XDOJ1253 簡單的遊戲
description 一年一度的acm校賽又到了,在這個陽光明媚的日子裡,兩個小朋友在玩乙個無聊而又簡單的遊戲 猜數字。小朋友cyin從1 100000裡面挑選了三個數字 他們可能相同 a,b,c,然後把a b,a c,b c的三個值告訴小朋友boat,你只需要寫乙個程式幫助小朋友boat去計算,...
HDU 1024 簡單dp 滾動陣列
要求 n個正數組成的序列,整數範圍 32768 s 32767,1 n 1,000,000,挑出m個無交集的連續子串行使這些序列和最大,並輸出最大值。方法 二維dp 滾動陣列降維。1.dp i j 表示第乙個數到下標為j的數挑出i個連續子串行組成的最大值。2.dp i j max dp i j 1 ...
XDOJ 另乙個簡單遊戲
時間限制 1 sec 記憶體限制 128 mb 提交 108 解決 25 提交 狀態 討論版 現在有n個數,每次可以取出任意兩個數x,y,然後加入乙個數為 x y 2,問最後剩下的那個數最大是多少?有多組輸入資料,第一行為乙個數字t,代表有t組輸入資料 0 20 接下來為t組資料。每組測試資料分2行...