XDOJ 1024 簡單逆序對

2022-05-21 00:58:34 字數 1270 閱讀 9378

題意:這題解法不唯一,我剛學線段樹,就直接上線段樹了,一般來說求逆序對,對序列離散化,然後對於原序列找出每個元素對應位置,然後依次放入線段樹中,查詢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行...