QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#853451#9731. Fuzzy Rankingawoo~ (Mikhail Piklyaev)#WA 10ms3504kbC++171.7kb2025-01-11 17:03:052025-01-11 17:03:16

Judging History

This is the latest submission verdict.

  • [2025-01-11 17:03:16]
  • Judged
  • Verdict: WA
  • Time: 10ms
  • Memory: 3504kb
  • [2025-01-11 17:03:05]
  • Submitted

answer

#include<bits/stdc++.h>

using namespace std;   

#define forn(i, n) for(int i = 0; i < int(n); i++)
#define fore(i, l, r) for(int i = int(l); i < int(r); i++)
#define sz(a) int((a).size())

typedef long long li;

int n, k, m;
vector<vector<int>> a;

bool read() {
	if (!(cin >> n >> k >> m))
		return false;
	a.resize(k);
	forn(i, k){
		a[i].resize(n);
		forn(j, n){
			cin >> a[i][j];
			--a[i][j];
		}
	}
	return true;
}

mt19937_64 rnd64(42);
typedef unsigned long long uli;

void solve() {
	vector<uli> val(n);
	forn(i, n) val[i] = rnd64();
	vector<pair<int, int>> seg;
	vector<uli> cur(k);
	int l = 0;
	forn(r, n){
		forn(i, k) cur[i] ^= val[a[i][r]];
		if (count(cur.begin(), cur.end(), cur[0]) == k){
			seg.push_back({l, r});
			cur.assign(k, 0);
			l = r + 1;
		}
	}
	vector<int> pr(n + 1);
	vector<int> nxt(n + 1, -1), prv(n, -1);
	for (auto [l, r] : seg){
		pr[l + 1] += (r - l) * li(r - l + 1) / 2;
		nxt[l] = l;
		prv[r] = r;
	}
	nxt[n] = n;
	fore(i, 1, n) if (prv[i] == -1) prv[i] = prv[i - 1];
	for (int i = n - 1; i >= 0; --i) if (nxt[i] == -1) nxt[i] = nxt[i + 1];
	forn(i, n) pr[i + 1] += pr[i];
	li v = 0;
	forn(i, m){
		int id, l, r;
		cin >> id >> l >> r;
		id = (id + v) % k + 1;
		l = (l + v) % n;
		r = (r + v) % n;
		li nv = pr[r + 1] - pr[l];
		nv += (nxt[l] - l) * li(nxt[l] - l - 1) / 2;
		if (r != prv[r]){
			nv -= ((nxt[r + 1] - 1) - (prv[r] + 1)) * li((nxt[r + 1] - 1) - (prv[r] + 1) + 1) / 2;
			nv += (r - prv[r]) * li(r - prv[r] - 1) / 2;
		}
		cout << nv << '\n';
		v = nv;
	}
}

int main() {
#ifdef _DEBUG
	freopen("input.txt", "r", stdin);
#endif
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	int t = 1;
	cin >> t;
	forn(i, t) {
	 	read();
		solve();
	}
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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: 10ms
memory: 3504kb

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
1
1
2
4
4
3
-14
61
-32
87448
0
6
-41
1326
1
-39
0
3
10
6
16
5
9
0
3
1
1
6
3
3
0
4
5
3
4
1
1
3
2
4
-1
2
-2
0
-3
-1
0
0
1
1
2
0
0
1
2
1
1
0
-1
0
0
-3
0
4
4
1
3
6
16
16
0
11
16
1
4
15
1
4
2
0
0
2
0
1
2
4
0
0
0
0
0
0
0
0
0
0
1
0
0
6
3
0
3
4
0
0
0
0
0
0
0
0
0
0
0
0
3
0
0
1
3
1...

result:

wrong answer 21st lines differ - expected: '1', found: '-14'