Submission #123100

#TimeUsernameProblemLanguageResultExecution timeMemory
123100mechfrog88Lightning Rod (NOI18_lightningrod)C++14
80 / 100
2051 ms262144 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#pragma GCC optimize("unroll-loops,no-stack-protector")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
 
using namespace __gnu_pbds;
using namespace std;
 
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
 
typedef long long ll;
typedef long double ld;	

inline int readInt() {
    int x = 0;
    char ch = getchar();
    while (ch < '0' || ch > '9') ch = getchar();
    while (ch >= '0' && ch <= '9'){
		x = (x << 3) + (x << 1) + ch - '0';
		ch = getchar();
	}
    return x;
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n;
	n = readInt();
	vector <pair<int,int>> arr(n);
	for (int z=0;z<n;z++){
		arr[z].first = readInt();
		arr[z].second = readInt();
		int t = arr[z].first;
		arr[z].first -= arr[z].second;
		arr[z].second += t;
	}
	stack <pair<int,int>> s;
	for (int z=0;z<n;z++){
		if (s.empty()){
			s.push(arr[z]);
		}
		if (s.top().first <= arr[z].first && arr[z].second <= s.top().second) continue;
		else{
			while (arr[z].first <= s.top().first && s.top().second <= arr[z].second){
				s.pop();
				if (s.size() == 0) break;
			}
			s.push(arr[z]);
		}
	}
	printf("%d",int(s.size()));
}
#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...