这都能MLE?
查看原帖
这都能MLE?
574944
Micnation_AFO楼主2021/11/13 21:07

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;
}
2021/11/13 21:07
加载中...