Submission #123109

#TimeUsernameProblemLanguageResultExecution timeMemory
123109mechfrog88Lightning Rod (NOI18_lightningrod)C++14
80 / 100
2049 ms116908 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;	

void fastscan(int &x)
    {
        bool neg=false;
        register int c;
        x =0;
        c=getchar();
        if(c=='-')
        {
            neg = true;
            c=getchar();
        }
        for(;(c>47 && c<58);c=getchar())
            x = (x<<1) + (x<<3) +c -48;
        if(neg)
            x *=-1;
    }

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n;
	fastscan(n);
	int arrx[n];
	int arry[n];
	for (int z=0;z<n;z++){
		fastscan(arrx[z]);
		fastscan(arry[z]);
	}
	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.emplace(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.emplace(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...