이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define suiii ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define ll long long
#define co cout<<
//#pragma GCC optimize("O3,Ofast,unroll-loops")
//#pragma GCC target("avx2,sse3,sse4,avx")
using namespace std;
//stuff
const ll N=exp2(ceil(log2(1e6)));
ll n,x;
ll arr[1000001];
ll arr1[1000001];
ll tre[N*4][2];
ll que(ll l,ll r,ll i,ll lq,ll rq,ll type){
if(l>rq||r<lq) return 0;
if(r<=rq&&l>=lq) return tre[i][type];
ll mid=(l+r)/2;
return max(que(l,mid,i*2,lq,rq,type),que(mid+1,r,i*2+1,lq,rq,type));
}
void upd(ll idx,ll val,ll type){
idx+=N;
tre[idx][type]=max(tre[idx][type],val);
idx/=2;
while(idx){
tre[idx][type]=max(tre[idx*2][type],tre[idx*2+1][type]);
idx/=2;
}
}
ll cnt=1;
void solve(){
cin>>n>>x;
for(int i=0;i<n;i++){
cin>>arr[i];
arr1[cnt]=arr[i];
cnt++;
arr1[cnt]=arr[i]+x;
cnt++;
}
sort(arr1+1,arr1+cnt);
for(int i=0;i<n;i++){
ll idx=lower_bound(arr1+1,arr1+cnt,arr[i])-arr1-1;
ll last=lower_bound(arr1+1,arr1+cnt,arr[i]+x)-arr1-1;
ll val=que(0,N-1,1,0,idx,0)+1;
ll val1=que(0,N-1,1,1,last,0)+1;
ll val2=que(0,N-1,1,1,idx,1)+1;
upd(idx+1,val,0);
upd(idx+1,val1,1);
upd(idx+1,val2,1);
}
co max(tre[1][0],tre[1][1]);
}
int main()
{
suiii
int t=1;
// cin>>t;
while(t--){
solve();
}
return 0;
}
# | 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... |