Submission #123108

#TimeUsernameProblemLanguageResultExecution timeMemory
123108mechfrog88Lightning Rod (NOI18_lightningrod)C++14
80 / 100
2067 ms124412 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();
	int arrx[n];
	int arry[n];
	for (int z=0;z<n;z++){
		arrx[z] = readInt();
		arry[z] = readInt();
	}
	stack <int> s;
	for (int z=0;z<n;z++){
		int a = arrx[z]-arry[z];
		int b = arrx[z]+arry[z];
		if (s.empty()){
			s.push(z);
		}
		int c = arrx[s.top()]-arry[s.top()];
		int d = arrx[s.top()]+arry[s.top()];
		if (c <= a && b <= d) continue;
		else{
			while (a <= c && d <= b){
				s.pop();
				if (s.size() == 0) break;
				c = arrx[s.top()]-arry[s.top()];
				d = arrx[s.top()]+arry[s.top()];
			}
			s.push(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...