#include<bits/stdc++.h>
using namespace std;
const int N=(int)5e5;
int n,m;
struct Point{
int t,a;
int rorate_x,rorate_y;
void rorate(){
rorate_x=t-a;
rorate_y=t+a;
}
bool operator < (const Point&other) const{
if (rorate_y!=other.rorate_y) return rorate_y<other.rorate_y;
return rorate_x<other.rorate_x;
}
};
Point p[N+2];
class Solution{
private:
multiset<int>bag;
public:
void solve(){
bag.clear();
int cnt=0;
for(int i=1;i<=m;++i){
if (bag.size()){
auto it=bag.lower_bound(p[i].rorate_x+1);
--it;
if (it!=bag.end() && *it<=p[i].rorate_x) bag.erase(it);
}
bag.insert(p[i].rorate_x);
}
cout<<bag.size();
}
};
Solution check_tool;
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
// freopen("txt.inp","r",stdin);
// freopen("txt.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=m;++i) cin>>p[i].t;
for(int i=1;i<=m;++i) cin>>p[i].a,p[i].rorate();
sort(p+1,p+m+1);
check_tool.solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |