QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#476944#5543. The Only ModeyzkkaiML 77ms13992kbC++202.2kb2024-07-13 21:48:552024-07-13 21:48:55

Judging History

你现在查看的是最新测评结果

  • [2024-07-13 21:48:55]
  • 评测
  • 测评结果:ML
  • 用时:77ms
  • 内存:13992kb
  • [2024-07-13 21:48:55]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define lowbit(x) ((x) & -(x))

inline void solve() {
    int n;
    cin >> n;
    
    vector<int> a(n);
    for (int& i : a)
        cin >> i;

    vector<vector<int>> pref(n + 1, vector<int>(4));
    for (int i = 1; i <= n; ++i) {
        for (int j = 0;j  < 4; ++j)
            pref[i][j] = pref[i - 1][j];

        ++pref[i][a[i - 1]];
    }

    auto modify = [&](int x, int y, int val, vector<vector<int>> &bit) -> void {
        for (; x < size(bit); x += lowbit(x))
            for (int j = y; j < size(bit[0]); j += lowbit(j))
                bit[x][j] = min(bit[x][j], val);
        return;
    };
    
    auto query = [&](int x, int y, const vector<vector<int>> &bit) -> int {
        int ret = 1e9;
        for (; x > 0; x -= lowbit(x))
            for (int j = y; j > 0; j -= lowbit(j))
                ret = min(ret, bit[x][j]);
        return ret;
    };

    vector<int> ans(4);
    for (int i = 0; i < 4; ++i) {
        vector<vector<int>> b(n + 1, vector<int>(4));
        vector<pair<int, int>> lr(3, {1e9, 0});
        for (int j = 0; j <= n; ++j) {
            for (int k = 0, f = 0; k < 3; ++k) {
                if (k == i) ++f;
                b[j][k] = pref[j][i] - pref[j][k + f];
                lr[k].first = min(lr[k].first, b[j][k]);
                lr[k].second = max(lr[k].second, b[j][k]);
            }
            b[j][3] = j;
        }

        sort(b.begin(), b.end());

        vector<vector<int>> bit(lr[1].second - lr[1].first + 1, vector<int>(lr[2].second - lr[2].first + 1, 1e9));
        for (int j = 0, lst = 0; j <= n; ++j) {
            if (b[lst][0] != b[j][0]) {
                for (int k = lst; k < j; ++k)
                    modify(abs(b[k][1] - lr[1].first) + 1, abs(b[k][2] - lr[2].first) + 1, b[k][3], bit);
                lst = j;
            }
            ans[i] = max(ans[i], b[j][3] - query(abs(b[j][1] - lr[1].first), abs(b[j][2] - lr[2].first), bit));
        }
    }

    for (int i = 0; i < 4; ++i)
        cout << ans[i] << " \n"[i == 3];

    return;
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    int t = 1;
    while (t--)
        solve();
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3604kb

input:

7
1 2 2 0 3 0 3

output:

4 1 5 3

result:

ok single line: '4 1 5 3'

Test #2:

score: 0
Accepted
time: 0ms
memory: 3620kb

input:

12
2 0 1 0 2 1 1 0 2 3 3 3

output:

4 9 1 9

result:

ok single line: '4 9 1 9'

Test #3:

score: 0
Accepted
time: 0ms
memory: 3600kb

input:

2
0 2

output:

1 0 1 0

result:

ok single line: '1 0 1 0'

Test #4:

score: 0
Accepted
time: 0ms
memory: 3596kb

input:

12
3 0 2 2 1 0 2 1 3 3 2 3

output:

1 5 11 8

result:

ok single line: '1 5 11 8'

Test #5:

score: 0
Accepted
time: 0ms
memory: 3616kb

input:

1
1

output:

0 1 0 0

result:

ok single line: '0 1 0 0'

Test #6:

score: 0
Accepted
time: 4ms
memory: 4336kb

input:

4207
3 1 0 3 2 0 3 1 1 1 1 3 0 1 1 0 2 2 3 0 1 1 0 1 0 2 0 1 0 0 3 3 1 0 1 3 3 0 2 0 2 0 1 0 2 3 2 3 0 0 0 0 1 2 1 2 0 2 2 0 3 3 2 2 0 2 2 0 3 0 1 3 1 1 0 2 3 0 1 2 1 2 0 0 1 1 0 3 3 2 0 2 1 3 0 1 0 3 0 0 0 2 2 2 0 1 1 0 3 1 1 3 3 2 2 1 3 3 1 3 2 0 2 3 2 2 1 0 2 3 0 1 0 0 1 1 1 3 3 1 3 3 3 0 0 0 3 2...

output:

2330 1520 4207 1359

result:

ok single line: '2330 1520 4207 1359'

Test #7:

score: 0
Accepted
time: 77ms
memory: 13992kb

input:

89925
0 0 0 3 0 3 0 2 3 2 3 1 0 0 0 2 2 1 3 3 0 0 1 0 0 3 0 1 0 0 1 1 0 0 1 2 1 3 1 2 1 2 2 1 0 2 2 3 0 0 1 0 2 3 2 3 0 0 1 0 0 1 2 1 3 0 0 0 2 1 1 0 1 3 2 2 0 0 2 3 2 3 3 1 3 3 0 2 0 2 2 0 2 1 3 0 1 1 0 0 1 0 3 1 2 2 2 0 2 0 2 3 2 0 0 2 3 3 1 0 1 2 2 2 1 2 0 0 3 2 3 0 1 1 3 3 0 0 0 3 0 2 0 0 2 3 1 ...

output:

89925 49888 75725 38162

result:

ok single line: '89925 49888 75725 38162'

Test #8:

score: 0
Accepted
time: 54ms
memory: 10776kb

input:

64937
1 1 0 2 1 1 3 1 1 1 2 0 3 1 1 2 1 2 2 1 0 2 1 1 1 1 1 0 3 1 0 2 1 0 0 0 0 2 1 2 1 2 2 1 2 3 2 1 2 1 3 0 1 3 0 0 1 3 1 2 2 2 0 3 3 1 3 0 3 3 2 0 1 1 2 0 3 3 3 2 1 0 1 0 1 3 0 0 2 1 0 3 3 1 2 3 2 1 1 0 0 3 1 1 2 1 0 2 1 0 0 1 1 3 0 1 2 1 3 2 0 3 1 2 1 2 0 0 0 1 1 2 3 3 2 1 1 1 2 1 3 1 2 2 2 0 1 ...

output:

64937 61901 51387 63870

result:

ok single line: '64937 61901 51387 63870'

Test #9:

score: 0
Accepted
time: 66ms
memory: 11876kb

input:

73423
1 2 2 0 0 0 0 2 1 2 1 2 1 3 1 3 3 0 1 2 2 0 0 0 3 2 1 1 0 3 0 2 1 3 1 1 2 3 0 1 2 1 0 0 0 3 3 0 3 2 3 3 1 1 3 2 0 0 0 3 2 0 0 2 3 3 3 3 3 2 3 2 2 2 3 3 0 1 1 2 2 2 1 2 2 1 1 2 1 2 2 3 0 3 0 2 2 2 1 2 1 1 2 3 0 1 3 2 0 3 3 3 0 2 2 2 3 1 0 1 0 1 1 3 0 0 2 1 1 3 1 3 3 2 0 2 2 1 1 0 1 0 2 3 1 2 3 ...

output:

36577 18616 60210 73423

result:

ok single line: '36577 18616 60210 73423'

Test #10:

score: 0
Accepted
time: 67ms
memory: 12804kb

input:

82517
2 1 1 0 2 0 3 1 3 1 3 3 2 2 3 0 3 2 2 0 2 1 0 2 2 3 2 0 1 0 1 2 2 1 1 1 3 2 2 0 1 0 0 3 3 1 1 0 3 1 3 1 2 3 3 3 3 3 2 1 3 1 3 0 2 0 2 0 2 2 2 2 2 1 2 1 3 3 2 3 2 3 0 2 0 1 0 0 3 2 1 1 0 1 2 1 1 0 1 3 1 3 3 2 2 3 0 2 1 3 2 1 0 1 2 3 2 2 3 3 1 0 2 0 3 2 3 0 1 2 0 3 3 0 2 1 1 3 3 2 2 0 2 2 1 1 2 ...

output:

50863 68187 40176 82517

result:

ok single line: '50863 68187 40176 82517'

Test #11:

score: 0
Accepted
time: 72ms
memory: 12620kb

input:

79392
0 2 2 2 0 3 2 3 1 1 1 0 0 3 1 3 3 0 2 2 0 0 0 2 1 0 2 2 2 1 2 3 2 0 3 3 3 2 0 1 0 1 1 1 0 1 0 1 0 2 3 3 0 1 2 3 0 1 0 1 0 1 2 2 1 3 0 0 1 3 1 2 2 1 0 0 2 1 0 0 2 2 3 1 3 0 3 2 0 0 0 0 3 3 0 0 2 2 0 2 0 2 3 1 0 2 2 1 2 2 0 3 3 3 2 1 3 1 1 1 1 2 0 0 1 1 1 0 1 1 1 3 3 0 2 3 1 1 0 1 2 3 1 3 3 0 0 ...

output:

68113 34911 26794 79392

result:

ok single line: '68113 34911 26794 79392'

Test #12:

score: -100
Memory Limit Exceeded

input:

100000
2 0 0 1 0 2 3 3 0 2 1 2 0 2 0 3 0 0 2 0 1 1 0 1 1 1 1 0 2 2 0 1 0 1 0 0 0 3 1 0 3 0 1 1 1 3 1 0 1 3 1 1 1 0 1 3 0 1 1 0 1 3 0 0 0 0 0 0 0 1 0 0 1 3 1 3 0 1 0 0 2 1 1 2 2 0 3 3 2 1 1 0 0 1 1 2 0 1 2 0 3 3 1 1 1 0 3 3 0 1 3 0 1 0 2 1 3 3 2 3 2 0 2 3 0 2 2 2 0 1 0 0 1 0 2 1 1 1 2 1 2 1 1 0 3 1 1...

output:

448 100000 52 33

result: