52602023-04-24 12:52:39ZsofiaKeresztelyMágikus táblázatcpp14Időlimit túllépés 0/100600ms15544 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, m;
vector<int> a, b;

bool ok(int mid){
    for (int i=1; i * i <= mid; i++){
        int di = (mid - 1) / i + 1;
        map<int, int> ma;
        int amax = -1e9, bmin = 1e9;
        if (i <= n && di <= m){
            for (int j=0; j<i; j++){
                ma[a[j]]++;
            }
            amax = max(amax, ma.begin()->first);
            for (int j=i; j<n; j++){
                ma[a[j]]++;
                ma[a[j-i]]--;
                if (!ma[a[j-i]]) ma.erase(a[j-i]);
                amax = max(amax, ma.begin()->first);
            }
            ma.clear();
            for (int j=0; j<di; j++){
                ma[b[j]]++;
            }
            bmin = min(bmin, ma.rbegin()->first);
            for (int j=di; j<m; j++){
                ma[b[j]]++;
                ma[b[j-i]]--;
                if (!ma[b[j-i]]) ma.erase(b[j-i]);
                bmin = min(bmin, ma.rbegin()->first);
            }
        }
        if (amax >= bmin) return true;
        amax = -1e9;
        bmin = 1e9;
        ma.clear();
        if (di <= n && i <= m){
            for (int j=0; j<di; j++){
                ma[a[j]]++;
            }
            amax = max(amax, ma.begin()->first);
            for (int j=di; j<n; j++){
                ma[a[j]]++;
                ma[a[j-i]]--;
                if (!ma[a[j-i]]) ma.erase(a[j-i]);
                amax = max(amax, ma.begin()->first);
            }
            ma.clear();
            for (int j=0; j<i; j++){
                ma[b[j]]++;
            }
            bmin = min(bmin, ma.rbegin()->first);
            for (int j=i; j<m; j++){
                ma[b[j]]++;
                ma[b[j-i]]--;
                if (!ma[b[j-i]]) ma.erase(b[j-i]);
                bmin = min(bmin, ma.rbegin()->first);
            }
        }
        if (amax >= bmin) return true;
    }
    return false;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> m;
    a.resize(n);
    b.resize(m);
    for (int &x : a){
        cin >> x;
    }
    for (int &x : b){
        cin >> x;
    }
    int l = 0, r = n * m + 1;
    while (l + 1 < r){
        int mid = (l + r) / 2;
        if (ok(mid)){
            l = mid;
        }
        else{
            r = mid;
        }
    }
    cout << l;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1980 KiB
2Időlimit túllépés600ms1896 KiB
subtask20/14
3Elfogadva13ms2404 KiB
4Hibás válasz21ms2372 KiB
5Elfogadva3ms2496 KiB
6Hibás válasz7ms2708 KiB
7Hibás válasz4ms2716 KiB
8Elfogadva4ms2848 KiB
subtask30/27
9Időlimit túllépés574ms2472 KiB
10Időlimit túllépés575ms3388 KiB
11Időlimit túllépés555ms2560 KiB
12Időlimit túllépés563ms3620 KiB
13Időlimit túllépés564ms2972 KiB
14Hibás válasz211ms3800 KiB
15Időlimit túllépés563ms4064 KiB
16Időlimit túllépés564ms3540 KiB
17Időlimit túllépés560ms4372 KiB
subtask40/21
18Időlimit túllépés547ms4560 KiB
19Időlimit túllépés573ms4232 KiB
20Időlimit túllépés600ms4216 KiB
21Időlimit túllépés552ms4280 KiB
22Hibás válasz17ms5452 KiB
23Hibás válasz17ms5456 KiB
24Időlimit túllépés600ms4236 KiB
subtask50/38
25Időlimit túllépés564ms9104 KiB
26Időlimit túllépés561ms9112 KiB
27Időlimit túllépés572ms9120 KiB
28Időlimit túllépés564ms9092 KiB
29Időlimit túllépés505ms9244 KiB
30Időlimit túllépés569ms9200 KiB
31Időlimit túllépés541ms9228 KiB
32Időlimit túllépés558ms7432 KiB
33Időlimit túllépés550ms7384 KiB
34Időlimit túllépés577ms4596 KiB
35Időlimit túllépés565ms6576 KiB
36Időlimit túllépés600ms9628 KiB
37Időlimit túllépés568ms5224 KiB
38Hibás válasz398ms15544 KiB
39Időlimit túllépés583ms9740 KiB
40Időlimit túllépés558ms9652 KiB
41Időlimit túllépés556ms9196 KiB
42Időlimit túllépés560ms5068 KiB
43Időlimit túllépés568ms7264 KiB
44Időlimit túllépés568ms7376 KiB