QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#339333#7904. Rainbow SubarrayJokerNVTTL 1ms3808kbC++201.6kb2024-02-27 06:38:492024-02-27 06:38:50

Judging History

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

  • [2024-06-09 00:00:26]
  • hack成功,自动添加数据
  • (/hack/652)
  • [2024-02-27 06:38:50]
  • 评测
  • 测评结果:TL
  • 用时:1ms
  • 内存:3808kb
  • [2024-02-27 06:38:49]
  • 提交

answer

#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
#include <string>
#include <map>
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include <cstdlib>
#include <set>
#define sqr(x) (x) * (x)
using namespace std;

const int MAX_SIZE = int(1e5+5);
const long long MOD = int(1e9+7);
const double EPS = 1e-6;

int T, n;
long long k;


int findLongestRainbowSubarray(vector<int> &a, vector<long long> &psum, long long k) {
    int ans = 1;
    int l = 1, r = n;
    while (l <= r) {
        int len = (l+r) >> 1;
        bool found = false;
        for (int i=len; i<=n && !found; i++) {
            long long sum = psum[i] - psum[i-len];
            long long avg = sum / len;
            vector<long long> f(2, 0);
            for (int j=0; j<len; j++) {
                f[0] += abs(a[i-len+j+1] - (avg + j - len / 2));
                f[1] += abs(a[i-len+j+1] - (avg + j - len / 2 + 1));
            }
            long long need = min(f[0], f[1]);
            if (need <= k) found = true;
        }
        if (found) {
            ans = max(ans, len);
            l = len+1;
        }
        else r = len-1;
    }
    return ans;
}


void solve() {
    cin >> T;
    while (T--) {
        cin >> n >> k;
        vector<int> a(n+1);
        vector<long long> psum(n+1, 0);
        for (int i=1; i<=n; i++) {
            cin >> a[i];
            psum[i] = psum[i-1] + a[i];
        }
        cout << findLongestRainbowSubarray(a, psum, k) << endl;
    }
}


int main() {
    // freopen("inp.txt", "r", stdin);

    //Boost C++ IO speed
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    solve();    
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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
Time Limit Exceeded

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
6
8
7
7
1
7
6
2
4
3
1
4
7
7
3
4
3
9
3
8
6
6
2
1
6
3
1
2
4
6
4
5
4
1
4
7
1
6
3
5
6
6
1
7
5
3
1
6
3
4
3
2
2
6
2
3
10
1
4
3
2
4
5
1
7
5
5
4
6
5
3
6
2
5
5
8
5
4
5
2
1
5
2
3
3
4
7
1
3
1
2
2
6
3
1
6
8
1
8
4
5
5
6
7
4
8
3
2
8
4
5
5
2
6
2
4
1
5
4
5
3
2
4
1
2
1
4
4
8
3
7
3
3
3...

result: