Submission #1129742

#TimeUsernameProblemLanguageResultExecution timeMemory
1129742Alihan_8Sails (IOI07_sails)C++20
0 / 100
1095 ms4028 KiB
#include <bits/stdc++.h>

using namespace std;

#define all(x) x.begin(), x.end()
#define ar array
#define pb push_back
#define ln '\n'
#define size(x) (int)(x).size()
#define int long long

typedef pair <int,int> pii;

using i64 = long long;

template <class F, class _S>
bool chmin(F &u, const _S &v){
    bool flag = false;
    if ( u > v ){
        u = v; flag |= true;
    }
    return flag;
}

template <class F, class _S>
bool chmax(F &u, const _S &v){
    bool flag = false;
    if ( u < v ){
        u = v; flag |= true;
    }
    return flag;
}

const int N = 1e5 + 5;

int cnt[N + 5], tot[N + 5];

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n; cin >> n;
    
    for ( int i = 0; i < n; i++ ){
		int h, k; cin >> h >> k;
		
		cnt[h - k + 1] += 1;
		cnt[h + 1] -= 1;
		tot[1] += 1, tot[h + 1] -= 1;
	}
	
	for ( int i = 1; i < N; i++ ){
		cnt[i] += cnt[i - 1];
		tot[i] += tot[i - 1];
	}
	
	priority_queue <ar<int,2>> q;
	
	int ans = 0;
	
	for ( int i = 1; i < N; i++ ){
		while ( size(q) && -q.top()[0] + 2 < cnt[i] ){
			auto [u, f] = q.top(); q.pop();
			u *= -1;
			
			cnt[i] -= 1, u += 1;
			
			if ( f > 1 ){
				q.push({-u, f - 1});
			} else ans += u * (u - 1) / 2;
		}
		
		q.push({-cnt[i], tot[i] - cnt[i]});
	}
	
	while ( size(q) ){
		auto [x, f] = q.top(); q.pop();
		x *= -1;
		
		ans += x * (x - 1) / 2;
	}
	
	cout << ans;

  	cout << '\n';
}
#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...