Submission #907504

#TimeUsernameProblemLanguageResultExecution timeMemory
907504vjudge1Izbori (COCI22_izbori)C++17
110 / 110
622 ms22100 KiB
#include<bits/stdc++.h>

using namespace std;

#define int long long
int n, a[1000001], num = 0, cnt[1000001], sz = 500, cnt2[1000001], res = 0, c[1000001], pfs[2000001], dp[1000001], sl[2000001];
pair<int, int> b[1000001];
vector<int> v;
bool check[1000001];

bool cmp(pair<int, int> a, pair<int, int> b) {
    return a.second < b.second;
}

signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        b[i].first = a[i];
        b[i].second = i;
    }
    int last = -1;
    sort(b + 1, b + 1 + n);
    for (int i = 1; i <= n; i++) {
        int l2 = b[i].first;
        if(b[i].first == last) b[i].first = num;
        else b[i].first = ++num;
        last = l2;
    }
    sort(b + 1, b + 1 + n, cmp);
    for (int i = 1; i <= n; i++) {
        a[i] = b[i].first;
        cnt[a[i]]++;
        if(cnt[a[i]] > sz && !check[a[i]]) {
            v.push_back(a[i]);
            check[a[i]] = true;
        }
    }
    for (int i = 1; i <= n; i++) {
        int mx = 1;
        for (int j = i; j <= min(i + 2 * sz - 1, n); j++) {
            num = j - i + 1;
            if(cnt[a[j]] <= sz) {
                cnt2[a[j]]++;
                mx = max(mx, cnt2[a[j]]);
                if(mx > num / 2) res++;
            }
        }
        for (int j = i; j <= min(i + 2 * sz - 1, n); j++) {
            if(cnt[a[j]] < sz) cnt2[a[j]]--;
        }
    }
    //cout << res << '\n';
    for (int i = 0; i < v.size(); i++) {
        int bnum = v[i];
        pfs[0] = n;
        sl[n] = 1;
        for (int j = 1; j <= n; j++) {
            if(a[j] == bnum) c[j] = 1;
            else c[j] = -1;
            pfs[j] = pfs[j - 1] + c[j];
            dp[pfs[j]] = dp[pfs[j] - 1] + sl[pfs[j] - 1];
            sl[pfs[j]]++;
            res += dp[pfs[j]];
        }
        for (int j = 1; j <= n; j++) {
            sl[pfs[j]] = 0;
            dp[pfs[j]] = 0;
        }
    }
    cout << res << '\n';
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:55:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |     for (int i = 0; i < v.size(); i++) {
      |                     ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...