QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#856461#9731. Fuzzy Rankingshi2ukuWA 13ms3712kbC++142.4kb2025-01-14 01:15:532025-01-14 01:15:55

Judging History

This is the latest submission verdict.

  • [2025-01-14 01:15:55]
  • Judged
  • Verdict: WA
  • Time: 13ms
  • Memory: 3712kb
  • [2025-01-14 01:15:53]
  • Submitted

answer

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
using ll = long long;
struct DSU {
    vector<int> a;
    vector<int> sz;
    DSU(int n) : a(vector<int>(n)), sz(vector<int>(n, 1)) {
        for (int i = 0; i < n; ++i) a[i] = i;
    }
    int find(int x) { return a[x] = x == a[x] ? x : find(a[x]); }
    int merge(int u, int v) {
        u = find(u);
        v = find(v);
        if (u > v) swap(u, v);
        if (u == v) return 0;
        a[v] = u;
        sz[u] += sz[v];
        return 1;
    }
};
using pii = pair<int, int>;
int cn2(int x) {
    return 1ll * x * (x - 1) / 2;
}

void solve() {
    int n, k, q;
    cin >> n >> k >> q;
    vector<int> p(n + 1);
    DSU f(n + 1);
    for (int i = 1, u; i <= n; ++i) cin >> u, p[u] = i;
    vector<pii> link;
    for (int _ = 1; _ < k; ++_) {
        vector<int> tmp(n);
        for (int i = 0, u; i < n; ++i) cin >> u, tmp[i] = p[u];

        for (int i = 1; i < n; ++i) {
            if (tmp[i - 1] > tmp[i]) link.push_back({tmp[i], tmp[i - 1]});
        }
    }
    sort(link.begin(), link.end());

    vector<int> a;
    vector<ll> b = {0};
    for (int i = 0, cur = 0; i < link.size(); ++i) {
        while (cur < link[i].first) {
            a.push_back(cur);
            cur++;
        }
        cur = max(link[i].second, cur);
    }
    a.push_back(n);
    for (int i = 1; i < a.size(); ++i) {
        ll t1 = a[i] - a[i - 1];
        b.push_back(b.back() + cn2(t1));
    }
    auto get = [&](int i) -> int {
        return lower_bound(a.begin(), a.end(), i) - a.begin() - 1;
    };
    for (ll i = 0, v = 0; i < q; ++i) {
        int id, l, r;
        cin >> id >> l >> r;
        id = (id + v) % k + 1;
        l = (l + v) % n + 1;
        r = (r + v) % n + 1;
        // cout << "query" << l << " " << r << '\n';
        int i1 = get(l);
        int i2 = get(r);
        if (i1 == i2) {
            int num = r - l + 1;
            v = cn2(num);
        } else {
            v = b[i2] - b[i1 + 1];
            v += cn2(a[i1 + 1] - l + 1);
            v += cn2(r - a[i2]);
        }
        cout << v << '\n';
    }
}

int main() {
    cin.tie(0), cout.tie(0), ios::sync_with_stdio(0);
    int t;
    cin >> t;
    while (t--) solve();
}
/*
2
5 2 2
1 2 3 4 5
5 4 3 2 1
1 0 2
1 2 1
5 3 3
1 2 3 4 5
1 3 2 4 5
1 2 3 5 4
0 0 2
0 2 3
1 0 3

1
5 3 3
1 2 3 4 5
1 3 2 4 5
1 2 3 5 4
0 0 2
0 2 3
1 0 3

*/

詳細信息

Test #1:

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

input:

2
5 2 2
1 2 3 4 5
5 4 3 2 1
1 0 2
1 2 1
5 3 3
1 2 3 4 5
1 3 2 4 5
1 2 3 5 4
0 0 2
0 2 3
1 0 3

output:

3
10
1
1
2

result:

ok 5 lines

Test #2:

score: -100
Wrong Answer
time: 13ms
memory: 3584kb

input:

2000
10 10 10
4 5 3 6 8 9 2 1 7 10
4 5 6 3 8 9 1 2 10 7
5 4 3 6 8 9 1 2 7 10
4 5 6 3 8 9 1 2 7 10
4 5 3 6 8 9 2 1 10 7
4 5 6 3 8 9 1 2 10 7
5 4 6 3 8 9 1 2 7 10
5 4 6 3 8 9 1 2 10 7
4 5 6 3 8 9 2 1 7 10
5 4 3 6 8 9 2 1 10 7
3 1 6
5 7 8
0 2 3
7 9 9
2 1 9
6 1 6
7 2 3
0 0 4
1 8 1
1 8 7
10 10 10
9 10 5 ...

output:

1
1
0
0
3
2
0
2
2
4
1
0
1
1
3
3
6
-5
0
0
1
6
28
0
0
10
10
6
6
15
0
3
10
6
22
3
6
1
2
1
1
6
3
3
0
4
5
3
4
1
3
-5
83
15
0
3
4
16
10
-9
0
0
3
-1
0
0
0
1
4
-1
6
0
0
1
22
4
0
22
0
2
3
6
16
16
0
11
16
1
4
15
1
4
4
-9
1
6
1
2
6
-3
15
6
3
3
3
6
1
1
10
28
3
-17
0
13
-17
0
10
3
1
1
1
21
28
3
3
21
6
1
15
1
6
1...

result:

wrong answer 15th lines differ - expected: '1', found: '3'