第11测试点WA求调
查看原帖
第11测试点WA求调
1008752
sjy01楼主2025/7/27 09:55

代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5 + 10;
int a[N];
int nxt[N][30], pos[20];
signed main() {
	int t;
	cin >> t;
	while (t--) {
		int n;
		cin >> n;
		memset(pos, 0, sizeof pos);
		for (int i = 1; i <= n; i++) {
			cin >> a[i];
			for (int j = 0; j <= 20; j++) {
				nxt[i][j] = n + 1;
			} 
		}
		for (int i = n; i >= 1; i--) {
			if (!pos[a[i]]) {
				nxt[a[i]][0] = n + 1;
				pos[a[i]] = i;
			} else {
				nxt[i][0] = pos[a[i]];
				pos[a[i]] = i;
			}
		}
		for (int i = n; i >= 1; i--) {
			for (int j = 1; j <= 20; j++) {
				if (nxt[i][j - 1] + 1 <= n) {
					nxt[i][j] = nxt[nxt[i][j - 1] + 1][j - 1];
				}
			}
		}
		int q;
		cin >> q;
		while (q--) {
			int l, r;
			cin >> l >> r;
			int ii = l;
			int ans = 0;
			while (ii <= r) {
				while (ii <= r && nxt[ii][0] > r) {
					ii++;
					ans++;
				}
				if (ii > r) {
					break;
				}
				for (int j = 20; j >= 0; j--) {
					if (nxt[ii][j] <= r) {
						ii = nxt[ii][j];
						break;
					}
				}
				ii++;
			}
			cout << ans << endl;
		}
	}
}

不知道哪里错了。

2025/7/27 09:55
加载中...