bzoj AC, luogu 10pts 求助
查看原帖
bzoj AC, luogu 10pts 求助
304550
black_trees楼主2022/5/1 20:51

Rt, 把数据下下来,本地测和 darkbzoj 提交都是 AC,但是到洛谷就是 WA #1~9。

有巨佬知道为什么吗

luogu 的10pts记录

darkbzoj 的AC记录


#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

#define meow(x) cerr << #x << " = " << x

using namespace std;
using i64 = long long;

const i64 si = 5e4 + 10;

i64 n, m, unit;
i64 c[si], cnt[si];
struct Query {
	i64 l, r, id;
	bool operator < (const Query &b) const {
		if((l / unit) != (b.l / unit)) 
			return l < b.l;
		if((l / unit) & 1)
			return r < b.r;
		return r > b.r;
	}
}ask[si];

i64 sum = 0;
i64 nume[si], deno[si];
i64 gcd(i64 a, i64 b) {
	return b ? gcd(b, a % b) : a;
}

void add(i64 pos) {
	i64 now = c[pos];
	sum -= (cnt[now] * (cnt[now] - 1)) / 2;
	cnt[now] ++;
	sum += (cnt[now] * (cnt[now] - 1)) / 2;
}
void sub(i64 pos) {
	i64 now = c[pos];
	sum -= (cnt[now] * (cnt[now] - 1)) / 2;
	cnt[now] --;
	sum += (cnt[now] * (cnt[now] - 1)) / 2;
}

int main() {	

	// freopen("1.in", "r", stdin);
	// freopen("1.ans", "w", stdout);

	cin.tie(0) -> sync_with_stdio(false);
	cin.exceptions(cin.failbit | cin.badbit);

	memset(cnt, 0, sizeof cnt);

	cin >> n >> m, unit = sqrt(n);
	for(int i = 1; i <= n; ++i)
		cin >> c[i];

	for(int i = 1; i <= m; ++i) 
		cin >> ask[i].l >> ask[i].r, ask[i].id = i;
	sort(ask + 1, ask + 1 + m);

	i64 l = 1, r = 0;
	for(int i = 1; i <= m; ++i) {
		Query &q = ask[i];

		if(q.l == q.r) {
			nume[q.id] = 0, deno[q.id] = 1;
			continue;
		}

		while(l > q.l) add(--l);
		while(r < q.r) add(++r);
		while(l < q.l) sub(l++);
		while(r > q.r) sub(r--);

		nume[q.id] = sum, deno[q.id] = (r - l + 1) * (r - l) / 2;
	}

	for(int i = 1; i <= m; ++i) {
		if(ask[i].l != ask[i].r) {
			i64 com = gcd(nume[i], deno[i]);
			nume[i] /= com, deno[i] /= com;
		}
		cout << nume[i] << "/" << deno[i] << endl;
	}

	return 0;
}
2022/5/1 20:51
加载中...