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:sample output3frank sam billy
sam frank billy
輸入2:
5a b c d e
b a d e c
輸出1:data constraint1輸出2:
3
1<=n<=100000
題意簡單:給定乙個標準,讓你求另乙個序列的逆序對數
序列都是字串形式,字串雜湊即可,這裡我選擇map(反正也能過)
然後用樹狀陣列經典求法即可
#include #includeview code#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;
}
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...