QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#624985 | #7904. Rainbow Subarray | ba_creeper | WA | 323ms | 4416kb | C++23 | 3.0kb | 2024-10-09 17:03:36 | 2024-10-09 17:03:36 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
typedef long long ll;
#define re read()
#define INF 2147483640
#define fr(i, x, y) for (int i = x, _ = y; i <= _; ++i)
#define rp(i, x, y) for (int i = x, _ = y; i >= _; --i)
#define Timeok ((double)clock() / CLOCKS_PER_SEC < MAX_TIME)
const double MAX_TIME = 1.0 - 0.0032;
inline ll read()
{
ll x = 0, f = 0;
char ch = getchar();
while (!isdigit(ch))
f |= (ch == '-'), ch = getchar();
while (isdigit(ch))
x = (x << 1) + (x << 3) + (ch ^= 48), ch = getchar();
return f ? -x : x;
}
void write(ll x)
{
if (x < 0)
putchar('-'), x = -x;
if (x > 9)
write(x / 10);
putchar(x % 10 + 48);
}
inline void W(ll x, char ch)
{
write(x);
putchar(ch);
}
/*------------C-O-D-E------------*/
const int N = 5e5 + 32;
ll n, m, k;
int a[N];
multiset<int> s1;
multiset<int> s2;
ll sum1, sum2;
void Change()
{
while(s1.size() > s2.size() + 1)
{
ll x = *(--s1.end());
s1.erase(--s1.end());
s2.insert(x);
sum1 -= x;
sum2 += x;
}
while(s2.size() > s1.size())
{
ll x = *s2.begin();
s2.erase(s2.begin());
s1.insert(x);
sum2 -= x;
sum1 += x;
}
}
void Insert(int x)
{
if(x <= *s2.begin())
{
s1.insert(x);
sum1 += x;
}
else
{
s2.insert(x);
sum2 += x;
}
Change();
}
void Del(int x)
{
auto it = s1.lower_bound(x);
if(it != s1.end())
{
sum1 -= *it;
s1.erase(it);
}
else
{
it = s2.lower_bound(x);
sum2 -= *it;
s2.erase(it);
}
Change();
}
int Zhong()
{
return *s1.rbegin();
}
ll Calc()
{
ll zh = Zhong();
ll ans = 0;
ans += sum2 - ((1LL * s2.size()) * zh);
ans += ((1LL * s1.size()) * zh) - sum1;
return ans;
}
bool Check(ll x)
{
s1.clear();
s2.clear();
s1.insert(-INF);
s2.insert(INF);
sum1 = 0;
sum2 = 0;
fr(i, 1, x)
{
// Insert(a[i]);
s1.insert(a[i]);
sum1 += a[i];
}
Change();
if(Calc() <= m) return 1;
// W(Calc(), '\n');
fr(i, x+1, n)
{
Insert(a[i]);
Del(a[i-x]);
if(Calc() <= m) return 1;
// W(Calc(), '\n');
}
return 0;
}
int main()
{
// cin.tie(0);
// cout.tie(0);
// ios::sync_with_stdio(false);
// ll T = re;
ll T;
T = re;
while (T--)
{
n = re, m = re;
fr(i, 1, n)
{
a[i] = re;
a[i] -= i;
}
int l = 0, r = min(n, 1LL * 10000);
// Check(4);
while (l < r)
{
int mid = (l + r) / 2 + 1;
if (Check(mid))
l = mid;
else
r = mid - 1;
}
W(l, '\n');
// fr(i, 1, n) a[i] = 0;
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3632kb
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: 323ms
memory: 4416kb
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 4 1 1 3 2 2 7 8 7 7 1 7 6 2 4 3 1 6 7 7 3 4 3 9 3 8 6 6 3 1 6 3 1 2 4 6 4 6 4 1 4 7 1 6 3 5 6 6 1 7 5 3 1 6 4 5 3 2 2 6 2 3 10 1 4 3 2 4 5 1 7 5 5 5 8 5 3 6 3 5 5 8 5 4 5 2 1 5 2 3 3 4 8 1 3 1 2 2 8 3 1 6 8 1 8 4 5 6 6 8 4 8 3 2 8 4 5 6 2 6 2 4 1 5 4 5 3 2 4 1 2 1 4 5 8 3 7 3 3 3...
result:
wrong answer 11101st lines differ - expected: '40384', found: '10000'