樹狀陣列 雜湊 JZOJ 3240 Seat

2022-04-30 19:45:08 字數 1356 閱讀 2897

description

你和你的夥伴正在籌備村里的萬人宴,由於村子是長條形的,所有賓客將坐在一張超級長桌的一側就餐。

正當籌備工作進行得火熱朝天,你和你的夥伴發現乙個嚴重問題:由於缺乏溝通,你倆各自製作了一張座位圖發給各位賓客。你必須計算出有多少對賓客,他們在兩份座位圖中次序安排是不同的。

例如,對以下兩份座位圖:

a b c d e

b a d e c

有三對賓客(a,b),(c,d)和(c,e),他們在兩份座位圖中的次序不同。

input

輸入的第一行是乙個整數n(1<=n<=100000),代表賓客的數量。接下來的兩行分別代表兩張座位圖。每行由n個空格分隔的字串組成,這些字串代表賓客,賓客名互不相同,只包含字母,長度不超過5個字元。兩張座位圖上的賓客名單保證是一致的。

output

輸出乙個整數,代表有多少對賓客被兩份座位圖安排了不同的次序。

sample input

輸入1:

3frank sam billy

sam frank billy

輸入2:

5a b c d e

b a d e c

sample output

輸出1:

1輸出2:

3

data constraint

1<=n<=100000

題意簡單:給定乙個標準,讓你求另乙個序列的逆序對數

序列都是字串形式,字串雜湊即可,這裡我選擇map(反正也能過)

然後用樹狀陣列經典求法即可

#include #include 

#include

#include

#include

#define lowbit(x) x&-x

using

namespace

std;

typedef

long

long

ll;const

int n=1e5+10

;ll t[n],ans;

inta[n];

maph;

string

c;int

n,cnt;

void add(int

x) ll sum(

intx)

intmain()

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

for (int i=n;i;i--)

ans+=sum(a[i]),add(a[i]);

printf(

"%lld

",ans);

return0;

}

view code

jzoj4711 Binary 樹狀陣列

每一位分別考慮,沒有加操作時直接開個計數器查詢就可以了。有了加操作,我們要考慮加對二進位制的影響。一位一位考慮,儲存當前位及以下的狀態,存到資料結構裡,y是1才有可能有貢獻。不進製時2 i 1 ai x 2 i 1。進製時2 i 2 i 1 ai x 2 i 1 1。include include ...

jzoj3512 遊戲節目 樹狀陣列,雙向dfs

有n個節目,每個節目對3個東西貢獻不同,要求選擇至少k個讓第乙個東西的值最大。求方案數 至少k個我們可以計算選擇任何個數的結果減去選擇k個的結果。由於k比較小,我們考慮直接暴搜 資料不是很大,我們可以將節目分成兩段進行搜尋所有結果。然後第一部分計算第1個東西的值減去第2個東西的值ab 1ia b1 ...

jzoj4866 禪與園林藝術 樹狀陣列

有乙個長度為 n 的數列,為一列樹木的美觀值。現在有m 次詢問,每次給出三個數l,r和p,詢問對於所有的l l r r a l a l 1 a r mod p的最小值。發現區間長度大於模數時答案為零,所以用個樹狀陣列維護一下就可以了。include include include include i...