P5149 会议座位
字符串哈希 + 归并排序
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
string a[N];
int tr[N];
int n;
int lowbit(int x){
return x & -x;
}
void add(int a,int b){
for(int i=a;i<=n;i+=lowbit(i)) tr[i] += b;
}
int query(int b){
int res = 0;
for(int i=b;i;i-=lowbit(i)) res += tr[i];
return res;
}
int main(){
cin >> n;
unordered_map<string,int>cnt;
int idx = 0;
for(int i=0;i<n;i++){
cin >> a[i];
cnt[a[i]] = ++idx;
}
int ans = 0;
for(int i=0;i<n;i++){
string x;
cin >> x;
ans += query(idx) - query(cnt[x]);
add(cnt[x],1);
}
cout << ans << endl;
return 0;
}