Submission #1297404

#TimeUsernameProblemLanguageResultExecution timeMemory
1297404quan606303Global Warming (CEOI18_glo)C++20
100 / 100
530 ms62416 KiB
/* * @Author: RMQuan * @Date: 2025-06-25 20:27:08 * @Last Modified by: RMQuan * @Last Modified time: 2025-06-25 21:35:01 */ /*idea : */ #include <bits/stdc++.h> #define ll long long #define INTMAX INT_MAX #define INTMIN INT_MIN #define LONGMAX LLONG_MAX #define LONGMIN LLONG_MIN #define fi first #define se second #define memfull(a,b) memset(a,b,sizeof(a)); #define endl '\n' #define file(a) freopen(a".inp","r",stdin); freopen(a".out","w",stdout); using namespace std; const int MOD=1e9+7; const int maxn=200005; int n,d,a[maxn]; struct ST { int N; vector<int> st; ST(int n):N(n),st(4*n+5,0){} void upd(int id,int l,int r,int pos,int val) { if (l>pos||r<pos)return ; if (l==r) { st[id]=max(st[id],val); return ; } int mid=(l+r)/2; upd(id*2,l,mid,pos,val); upd(id*2+1,mid+1,r,pos,val); st[id]=max(st[id*2],st[id*2+1]); } int get(int id,int l,int r,int u,int v) { if (l>v||r<u)return 0; if (l>=u&&r<=v)return st[id]; int mid=(l+r)/2; return max(get(id*2,l,mid,u,v),get(id*2+1,mid+1,r,u,v)); } }; struct ST_Lazy { int N; vector<int> st,lazy; ST_Lazy(int n):N(n),st(4*n+5,0),lazy(4*n+5,0){} void fix(int id,int l,int r) { if (lazy[id]==0)return; st[id]=max(st[id],lazy[id]); if (l!=r) { lazy[id*2]=max(lazy[id*2],lazy[id]); lazy[id*2+1]=max(lazy[id*2+1],lazy[id]); } lazy[id]=0; } void upd(int id,int l,int r,int u,int v,int val) { fix(id,l,r); if (l>v||r<u)return ; if (l>=u&&r<=v) { lazy[id]=max(lazy[id],val); fix(id,l,r); return ; } int mid=(l+r)/2; upd(id*2,l,mid,u,v,val); upd(id*2+1,mid+1,r,u,v,val); st[id]=max(st[id*2],st[id*2+1]); } int get(int id,int l,int r,int u,int v) { fix(id,l,r); if (l>v||r<u)return 0; if (l>=u&&r<=v)return st[id]; int mid=(l+r)/2; return max(get(id*2,l,mid,u,v),get(id*2+1,mid+1,r,u,v)); } }; int L[maxn],R[maxn],b[maxn]; int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //file("CLIS"); cin>>n>>d; vector<int> nen; nen.push_back(-1e18); for (int i=1;i<=n;i++) { cin>>a[i]; nen.push_back(a[i]); nen.push_back(a[i]-d); nen.push_back(a[i]+d); } sort(nen.begin(),nen.end()); nen.erase(unique(nen.begin(),nen.end()),nen.end()); for (int i=1;i<=n;i++)b[i]=lower_bound(nen.begin(),nen.end(),a[i])-nen.begin(); int N=nen.size()+5; ST st1(N),st2(N); int ans=0; for (int i=1;i<=n;i++) { L[i]=st1.get(1,1,N,1,b[i]-1)+1; st1.upd(1,1,N,b[i],L[i]); ans=max(ans,L[i]); } for (int i=n;i>=1;i--) { R[i]=st2.get(1,1,N,b[i]+1,N)+1; st2.upd(1,1,N,b[i],R[i]); ans=max(ans,R[i]); } ST_Lazy st3(N),st4(N); for (int i=1;i<=n;i++) { int MX=lower_bound(nen.begin(),nen.end(),a[i]+d)-nen.begin(); ans=max(ans,st3.get(1,1,N,1,MX-1)+R[i]); st3.upd(1,1,N,b[i],b[i],L[i]); } for (int i=n;i>=1;i--) { int MN=lower_bound(nen.begin(),nen.end(),a[i]-d)-nen.begin(); ans=max(ans,st4.get(1,1,N,MN+1,N)+L[i]); st4.upd(1,1,N,b[i],b[i],R[i]); } cout<<ans; return 0; }

Compilation message (stderr)

glo.cpp: In function 'int32_t main()':
glo.cpp:102:19: warning: overflow in conversion from 'double' to 'std::vector<int>::value_type' {aka 'int'} changes value from '-1.0e+18' to '-2147483648' [-Woverflow]
  102 |     nen.push_back(-1e18);
      |                   ^~~~~
#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...