Submission #940873

# Submission time Handle Problem Language Result Execution time Memory
940873 2024-03-07T21:14:23 Z codefox Sails (IOI07_sails) C++14
5 / 100
104 ms 12944 KB
#include<bits/stdc++.h> 

using namespace std;

#define int long long

int N = 1<<18;
vector<int> bpro(2*N, 0);
vector<int> bmin(2*N, 0);

void update(int curr, int l, int r, int ll, int rr, int p)
{
    if (l >= rr || r <= ll) 
    {
        bpro[curr]+=p;
        bmin[curr]+=p;
        return;
    }
    if (l >= ll && r <= rr)
    {
        bpro[curr]+=p+1;
        bmin[curr]+=p+1;
        return;
    }

    p += bpro[curr];
    bpro[curr] = 0;

    int m = (l+r)/2;
    update(curr*2, l, m, ll, rr, p);
    update(curr*2+1, m, r, ll, rr, p);
    bmin[curr] = min(bmin[curr*2], bmin[curr*2+1]);
}

int search(int curr, int l, int r, int rr, int b, int p)
{
    if (bmin[curr]+p >= b || l >= rr) 
    {
        bpro[curr]+=p;
        bmin[curr]+=p;
        return 0;
    }
    if (l+1 == r) 
    {
        bpro[curr]+=p;
        bmin[curr]+=p;
        return l;
    }

    p += bpro[curr];
    bpro[curr] = 0;

    int m = (l+r)/2;
    int mx = search(curr*2+1, m, r, rr, b, p);
    if (mx == 0) mx = search(curr*2, l, m, rr, b, p);
    bmin[curr] = min(bmin[curr*2], bmin[curr*2+1]);
    return mx;    
}

int32_t main()
{
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);

    int n;
    cin >> n;
    vector<vector<int>> height(1e5+1);

    int left = 0;

    for (int i = 0; i < n; i++)
    {
        int a, b;
        cin >> a >> b;
        height[a].push_back(b);
        left += b;
    }
    long long sol = 0;

    int upper = 1e5;

    for (int i = 1e5; i > 0; i--)
    {
        sort(height[i].begin(), height[i].end(), greater<int>());
        for (int ele:height[i])
        {
            int b = ceil(left/(double)upper);
            do
            {    
                int uh = bmin[upper+N];
                int curr = upper+N;
                while (curr>1)
                {
                    curr/=2;
                    uh+=bpro[curr];
                }
                if (uh >= b) 
                {
                    upper--;
                    left -= uh;
                }
                else break;
            }
            while (true);

            //int s = search(1, 0, N, i+1, b, 0)+1;
            //cout << bmin[N+s-1] << " " << s-ele << " " << s << endl;
            update(1, 0, N, upper-ele+1, upper+1, 0);
        }
        long long h = bmin[i+N];
        int curr = i+N;
        while (curr>1)
        {
            curr/=2;
            h+=bpro[curr];
        }
        if (h) sol += (h*(h-1))/2;
        if (upper == i) 
        {
            left -= h;
            upper--;
        }
    }
    cout << sol << "\n";

    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 4 ms 10844 KB Output is correct
2 Correct 5 ms 10844 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 10844 KB Output is correct
2 Incorrect 4 ms 10840 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 11252 KB Output is correct
2 Incorrect 5 ms 10844 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 10844 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 10840 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 14 ms 11100 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 27 ms 11864 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 43 ms 11868 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 66 ms 12104 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 87 ms 12944 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 104 ms 12836 KB Output isn't correct
2 Halted 0 ms 0 KB -