QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#624985#7904. Rainbow Subarrayba_creeperWA 323ms4416kbC++233.0kb2024-10-09 17:03:362024-10-09 17:03:36

Judging History

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

  • [2024-10-09 17:03:36]
  • 评测
  • 测评结果:WA
  • 用时:323ms
  • 内存:4416kb
  • [2024-10-09 17:03:36]
  • 提交

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;
}

Details

Tip: Click on the bar to expand more detailed information

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'