社区讨论

本题该复杂度是否可过?

AT_joisc2014_c歴史の研究参与者 6已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m37a4hfo
此快照首次捕获于
2024/11/07 20:23
去年
此快照最后确认于
2025/11/04 15:10
4 个月前
查看原帖
O(nnlogn)O(n \sqrt n\log n),普通莫队 + set 维护最大值。
TLE。
CPP
#include <bits/stdc++.h>
#define _for(i, a, b)  for (int i = (a); i <= (b); i ++ )
#define ll long long
using namespace std;
const int N = 1e5 + 5;
int n, m, q, B, a[N], b[N], cnt[N], bel[N]; ll ans[N]; int add_cnt, del_cnt;
struct Query { int l, r, id; } qry[N];
struct Event {
	int id; ll w;
	inline bool operator < (const Event & t) const { return w > t.w; }
};
set<Event> s; set<Event> :: iterator it;
inline void add(int x) {
	it = s.find((Event){x, 1ll * cnt[x] * b[x]}), cnt[x] ++ ;
	if (it != s.end())  s.erase(it);
	s.insert((Event){x, 1ll * cnt[x] * b[x]});
}
inline void del(int x) {
	it = s.find((Event){x, 1ll * cnt[x] * b[x]}), cnt[x] -- ;
	if (it != s.end())  s.erase(it);
	s.insert((Event){x, 1ll * cnt[x] * b[x]});
}
int main() {
	ios :: sync_with_stdio(false), cin.tie(0), cout.tie(0);
	cin >> n >> q, B = sqrt(n); int l = 1, r = 0, L, R, id;
	_for (i, 1, n)  cin >> a[i], b[i] = a[i], bel[i] = (i - 1) / B + 1;
	sort(b + 1, b + n + 1), m = unique(b + 1, b + n + 1) - b - 1;
	_for (i, 1, n)  a[i] = lower_bound(b + 1, b + m + 1, a[i]) - b;
	_for (i, 1, q)  cin >> qry[i].l >> qry[i].r, qry[i].id = i;
	sort(qry + 1, qry + q + 1, [&] (Query u, Query v) { return bel[u.l] ^ bel[v.l] ? bel[u.l] < bel[v.l] : (bel[u.l] & 1 ? u.r > v.r : u.r < v.r); });
	_for (i, 1, q) {
		L = qry[i].l, R = qry[i].r, id = qry[i].id;
		while (l > L)  add(a[ -- l]), add_cnt ++ ;
		while (r < R)  add(a[ ++ r]), add_cnt ++ ;
		while (l < L)  del(a[l ++ ]), del_cnt ++ ;
		while (r > R)  del(a[r -- ]), del_cnt ++ ;
		ans[id] = ( * s.begin()).w;
	}
	cerr << add_cnt << " " << del_cnt << "\n";
	_for (i, 1, q)  cout << ans[i] << "\n";
	return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...