제출 #835225

#제출 시각아이디문제언어결과실행 시간메모리
835225dungzGlobal Warming (CEOI18_glo)C++17
0 / 100
26 ms16768 KiB
#pragma GCC optimize ("O2") #include<bits/stdc++.h> using namespace std; #define ll long long #define fi first #define se second #define endl '\n' #define task "task" #define task "task" #define prll pair<ll,ll> #define pb push_back #define ld long double #define int ll const ll MIN=-1e18,MAX=1e18,MOD=1e9+7; map<int,int> danh; int tree[800005],a[200005],f[200005],f2[200005]; void update(int node,int l,int r,int u,int v) { if(l>u or r<u) return; if(l==r) { tree[node]=max(tree[node],v); return; } int m=(l+r)/2; update(node*2,l,m,u,v); update(node*2+1,m+1,r,u,v); tree[node]=max(tree[node*2],tree[node*2+1]); } int get(int node,int l,int r,int u,int v) { if(l>v or r<u) return 0; if(l>=u and r<=v) return tree[node]; int m=(l+r)/2; return max(get(node*2,l,m,u,v),get(node*2+1,m+1,r,u,v)); } vector<int> lst; signed main(){ #ifndef ONLINE_JUDGE freopen (task".inp", "r", stdin); freopen (task".out", "w", stdout); #endif ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int n,k; cin>>n>>k; for(int i=1;i<=n;i++) { cin>>a[i]; lst.push_back(a[i]); } sort(lst.begin(),lst.end()); int d=0,ans=0; for(auto i:lst) { if(!danh[i]) { danh[i]=++d; } } for(auto i:lst) { cout<<i<<" "; } cout<<endl; for(int i=1;i<=n;i++) { f[i]=get(1,1,n,1,danh[a[i]]-1)+1; update(1,1,n,danh[a[i]],f[i]); ans=max(ans,f[i]); // cout<<f[i]<<" "; } // cout<<endl; for(int i=1;i<=4*n;i++) tree[i]=0; for(int i=n;i>=1;i--) { f2[i]=get(1,1,n,danh[a[i]]+1,n)+1; update(1,1,n,danh[a[i]],f2[i]); // cout<<f2[i]<<" "; } // cout<<endl; for(int i=1;i<=4*n;i++) tree[i]=0; for(int i=1;i<=n;i++) { int idx=lower_bound(lst.begin(),lst.end(),a[i]+k)-lst.begin()-1; ans=max(ans,get(1,1,n,1,danh[lst[idx]])+f2[i]); // cout<<get(1,1,n,1,danh[lst[idx]])<<" "; update(1,1,n,danh[a[i]],f[i]); } // cout<<endl; for(int i=1;i<=4*n;i++) tree[i]=0; for(int i=n;i>=1;i--) { int idx=lower_bound(lst.begin(),lst.end(),a[i]-k+1)-lst.begin(); // cout<<a[i]<<" "<<idx<<endl; // cout<<danh[lst[idx]]<<endl; if(danh[lst[idx]]!=0) ans=max(ans,get(1,1,n,danh[lst[idx]],n)+f[i]); // cout<<ans<<" "; update(1,1,n,danh[a[i]],f2[i]); } cout<<ans; } /* */

컴파일 시 표준 에러 (stderr) 메시지

glo.cpp: In function 'int main()':
glo.cpp:40:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |      freopen (task".inp", "r", stdin);
      |      ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
glo.cpp:41:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |      freopen (task".out", "w", stdout);
      |      ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...