rt,翻了一下题解,发现这篇题解的空间复杂度跟我的代码应该是一样的,但是我为什么MLE6个点?
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define lowbit(x) (x & -x)
#define maxn 500005
#define maxm 100005
int Trie[maxn][100], tail[maxm];
int c[maxm];
int n, tot, ans;
int a[maxn];
void insert(int i, string s) {
int p = 1;
for (int k = 0; k < s.size(); k++) {
int ch = s[k] - 'A';
if (Trie[p][ch] == 0) Trie[p][ch] = ++tot;
p = Trie[p][ch];
}
tail[p] = i;
}
int search(string s) {
int p = 1;
for (int k = 0; k < s.size(); k++) {
int ch = s[k] - 'A';
p = Trie[p][ch];
}
return tail[p];
}
void add(int x, int y) {
for (; x <= n; x += lowbit(x)) c[x] += y;
}
int ask(int x) {
int ans = 0;
for (; x; x -= lowbit(x)) ans += c[x];
return ans;
}
signed main() {
cin >> n;
for (int i = 1; i <= n; i++) {
string s; cin >> s;
insert(i, s);
}
for (int i = 1; i <= n; i++) {
string s; cin >> s;
a[i] = search(s);
}
for (int i = n; i >= 1; i--) {
ans += ask(a[i] - 1);
add(a[i], 1);
}
cout << ans << endl;
return 0;
}