QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#856461 | #9731. Fuzzy Ranking | shi2uku | WA | 13ms | 3712kb | C++14 | 2.4kb | 2025-01-14 01:15:53 | 2025-01-14 01:15:55 |
Judging History
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
*/
Details
Tip: Click on the bar to expand more detailed information
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'