#![allow(non_snake_case)] #![allow(unused_imports)] #![allow(unused_macros)] #![allow(clippy::needless_range_loop)] #![allow(clippy::comparison_chain)] #![allow(clippy::nonminimal_bool)] #![allow(clippy::neg_multiply)] #![allow(dead_code)] #![allow(clippy::collapsible_else_if)] use proconio::{ fastout, input, input_interactive, marker::{Chars, Usize1}, }; use std::cmp::Reverse; use std::collections::BinaryHeap; use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet, VecDeque}; use std::mem::swap; //const MOD: usize = 1e9 as usize + 7; const MOD: usize = 998244353; // const MOD: usize = 2147483647; #[macro_export] macro_rules! max { ($x: expr) => ($x); ($x: expr, $( $y: expr ),+) => { std::cmp::max($x, max!($( $y ),+)) } } #[macro_export] macro_rules! min { ($x: expr) => ($x); ($x: expr, $( $y: expr ),+) => { std::cmp::min($x, min!($( $y ),+)) } } fn main() { input! { N:usize, K:i64, H:[usize;N], pos:[(i64,i64);N], } let K = K * K; let mut graph = vec![vec![]; N]; for i in 0..N { for j in 0..N { if i == j { continue; } let dist = (pos[i].0 - pos[j].0).pow(2) + (pos[i].1 - pos[j].1).pow(2); if dist <= K && H[i] > H[j] { graph[j].push(i); } } } let mut ans = 0; for i in 0..N { if graph[i].is_empty() { ans += 1; } } println!("{}", ans); }