Submission #1142508

#TimeUsernameProblemLanguageResultExecution timeMemory
1142508AtabayRajabliIzbori (COCI22_izbori)C++20
0 / 110
12 ms5956 KiB
#include <bits/stdc++.h>
#define all(v) v.begin(), v.end()
using namespace std;

const int sz = 2e5 + 5, inf = 1e9 + 7;
int n, a[sz], fr[sz], p[3][sz];

struct FW
{
    vector<int> f;
    int n;
    FW(int len)
    {
        n = 2 * len + 5;
        f.resize(2 * n + 5, 0);
    }
    void add(int i)
    {
        for(; i < n; i += i & -i) f[i]++;
    }
    int get(int i)
    {
        int r = 0;
        for(; i > 0; i -= i & -i) r += f[i];
        return r;
    }
};

void solve()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    int ans = 0;
    for(int i = 1; i <= n; i++)
    {
        p[1][i] = p[1][i - 1] + (a[i] == 1);
        p[2][i] = p[2][i - 1] + (a[i] == 2);
    }

    FW f1(n), f2(n);
    f1.add(0 + n + 5);
    f2.add(0 + n + 5);
    for(int i = 1; i <= n; i++)
    {
        int v1 = 2 * p[1][i] - i;
        int v2 = 2 * p[2][i] - i;
        ans += f1.get(v1 - 1 + n + 5);
        ans += f2.get(v2 - 1 + n + 5);
        f1.add(v1 + n + 5);
        f2.add(v2 + n + 5);
    }
    cout << ans;
}

signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int t = 1;
    // cin >> t;
    while(t--) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...