Submission #777574

#TimeUsernameProblemLanguageResultExecution timeMemory
777574a_aguiloSails (IOI07_sails)C++14
40 / 100
1067 ms2524 KiB
#include<bits/stdc++.h>

using namespace std;

int N;
long long ans;
const int maxN = 100002;
const int maxH = 100002;
pair<int, int> masts[maxN];
int res[maxH];

void merge(int a1[], int l1, int a2[], int l2){
	int pos1 = 0;
	int pos2 = 0;
	for(int i = 0; i < (l1 + l2); ++i){
		if(pos1 <l1 && pos2 < l2){
			if(a1[pos1] > a2[pos2]){
				res[i] = (a1[pos1]);
				pos1++;
			}else{
				res[i] = a2[pos2];
				pos2++;
			}
		}else if(pos1 < l1){
			res[i] = a1[pos1];
			pos1++;
		}else{
			res[i] = a2[pos2];
			pos2++;
		}
		//cout << res[i] << " ";
	}
	//cout << endl;
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	ans = 0;
	cin >> N;
	for(int i = 0; i < N; ++i) cin >> masts[i].first >> masts[i].second;
	int occupation[maxH];
	int lim = 0;
	sort(masts, masts+N);
	for(int i = 0; i < N; ++i){
		int h = masts[i].first;
		int k = masts[i].second;
		int prov[k];
		while(lim < h){
			occupation[lim] = 0;
			lim++;
		}
		for(int j = 0; j < k; ++j){
			prov[k - j - 1] = occupation[lim-1] + 1;
			ans += occupation[lim-1];
			lim--;
		}
		merge(occupation, lim, prov, k);
		swap(occupation, res);
		lim += k;
	}
	cout << ans << '\n';
	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...