QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#279109#7904. Rainbow Subarraysupepapupu#WA 138ms5468kbC++171.9kb2023-12-08 11:08:262023-12-08 11:08:26

Judging History

你现在查看的是最新测评结果

  • [2024-06-09 00:00:26]
  • hack成功,自动添加数据
  • (/hack/652)
  • [2023-12-08 11:08:26]
  • 评测
  • 测评结果:WA
  • 用时:138ms
  • 内存:5468kb
  • [2023-12-08 11:08:26]
  • 提交

answer

#include <bits/stdc++.h>

#define x first
#define y second
#define el '\n'
#define debug(x) cerr << #x << ": " << x << endl
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int N = 3e5 + 10, INF = 0x3f3f3f3f, mod = 998244353;

void solve() {
    int n; ll k; cin >> n >> k;
    vector<int> a(n);
    for (int i = 0; i < n; ++i) cin >> a[i], a[i] -= i;
    int ans = 1;
	ll s1 = 0, s2 = 0;
	multiset<ll> Q1, Q2;
	for (int i = 0, j = 0; i < n; ++i) {
		if (Q1.empty() || a[i] >= *Q1.begin()) Q1.insert(a[i]), s1 += a[i];
		else Q2.insert(a[i]), s2 += a[i];
		while (Q1.size() >= Q2.size() + 2) {
			s1 -= *Q1.begin(), s2 += *Q1.begin();
			Q2.insert(*Q1.begin()), Q1.erase(Q1.begin());
		}
		while (Q1.size() < Q2.size()) {
			s2 -= *Q2.rbegin(), s1 += *Q2.rbegin();
			Q1.insert(*Q2.rbegin()), Q2.erase(Q2.find(*Q2.rbegin()));
		}
		// cout << j << ' ' << i << el;
		// cout << s1 << ' ' << s2 << el;
		// cout << *Q1.begin() << el;
		while (j && s1 - Q1.size() * *Q1.begin() + Q2.size() * *Q1.begin() - s2 <= k) {
			ans = max(ans, i - j + 1);
			--j;
			Q1.insert(a[j]), s1 += a[j];
			while (Q1.size() >= Q2.size() + 2) {
				s1 -= *Q1.begin(), s2 += *Q1.begin();
				Q2.insert(*Q1.begin()), Q1.erase(Q1.begin());
			}
			if (s1 - Q1.size() * *Q1.begin() + Q2.size() * *Q1.begin() - s2 <= k) ans = max(ans, i - j + 1);
		}
		if (Q1.count(a[j])) Q1.erase(Q1.find(a[j])), s1 -= a[j];
		else Q2.erase(Q2.find(a[j])), s2 -= a[j];
		while (Q1.size() >= Q2.size() + 2) {
			s1 -= *Q1.begin(), s2 += *Q1.begin();
			Q2.insert(*Q1.begin()), Q1.erase(Q1.begin());
		}
		while (Q1.size() < Q2.size()) {
			s2 -= *Q2.rbegin(), s1 += *Q2.rbegin();
			Q1.insert(*Q2.rbegin()), Q2.erase(Q2.find(*Q2.rbegin()));
		}
		++j;
	}
	cout << ans << el;
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int tcase = 1;
    cin >> tcase;
    while (tcase--) solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3400kb

input:

5
7 5
7 2 5 5 4 11 7
6 0
100 3 4 5 99 100
5 6
1 1 1 1 1
5 50
100 200 300 400 500
1 100
3

output:

4
3
5
1
1

result:

ok 5 lines

Test #2:

score: -100
Wrong Answer
time: 138ms
memory: 5468kb

input:

11102
2 167959139
336470888 134074578
5 642802746
273386884 79721198 396628655 3722503 471207868
6 202647942
268792718 46761498 443917727 16843338 125908043 191952768
2 717268783
150414369 193319712
6 519096230
356168102 262263554 174936674 407246545 274667941 279198849
9 527268921
421436316 3613460...

output:

1
4
3
2
6
5
7
2
4
1
5
1
1
3
3
2
7
8
7
7
1
7
6
2
4
3
1
7
7
7
3
4
3
9
3
8
6
6
3
1
6
3
1
2
4
7
4
6
4
1
5
7
1
7
3
5
6
7
1
7
5
3
1
6
5
5
3
3
3
7
2
3
10
1
4
3
2
4
5
1
7
5
5
5
8
5
3
6
3
5
5
9
5
4
5
3
1
5
3
3
3
5
8
1
3
1
2
2
8
3
1
6
8
1
8
4
5
6
6
9
4
8
3
2
8
4
5
6
2
7
2
4
1
5
4
5
3
3
4
1
2
1
5
5
9
3
7
3
3
3...

result:

wrong answer 11th lines differ - expected: '4', found: '5'