제출 #1162118

#제출 시각아이디문제언어결과실행 시간메모리
1162118DangKhoizzzzSails (IOI07_sails)C++20
0 / 100
65 ms9800 KiB
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pii pair <int , int>
#define arr3 array <int , 3>

/*
+ array limit ???
+ special case ??? n = 1?
+ time limit ???
*/

using namespace std;

const int INF = 1e18 + 7;
const int maxn = 1e6 + 7;


struct Fenwick_Tree
{
    vector <int> tree = vector <int> (maxn + 3 , 0);

    void update(int pos , int val)
    {
        while(pos < tree.size())
        {
            tree[pos] += val;
            pos += (pos & (-pos));
        }
    }

    int get_prefix(int pos)
    {
        int sum = 0;
        while(pos > 0)
        {
            sum += tree[pos];
            pos -= (pos & (-pos));
        }
        return sum;
    }

} bit;

int find_pos(int val)
{
    int l = 1 , r = maxn , pos;
    while(l <= r)
    {
        int mid = (l+r) >> 1;
        if(bit.get_prefix(mid) < val)
        {
            pos = mid;
            r = mid - 1;
        }
        else l = mid + 1;
    }
    return pos;
}

int n;
pii a[maxn];

void solve()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i].fi >> a[i].se;
    }
    sort(a+1 , a+n+1);

    for(int i = 1; i <= n; i++)
    {
        int h = a[i].fi , k = a[i].se;

        if(bit.get_prefix(h) < bit.get_prefix(h - k + 1))
        {
            int id1 = find_pos(bit.get_prefix(h - k + 1) + 1);
            int id2 = find_pos(bit.get_prefix(h - k + 1));

            bit.update(id2 , 1);
            bit.update(h+1 , -1);

            bit.update(id1 , 1);
            bit.update(id1 + (h - id2 + 1), - 1);
        }
        else
        {
            int id1 = find_pos(bit.get_prefix(h - k + 1) + 1);

            bit.update(id1 , 1);
            bit.update(id1 + k , -1);
        }
    }

    int ans = 0ll;
    for(int i = 1; i < maxn; i++)
    {
        int cnt = bit.get_prefix(i);
        ans += cnt*(cnt - 1)/2;
    }
    cout << ans << '\n';

}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...