Submission #1205731

#TimeUsernameProblemLanguageResultExecution timeMemory
1205731asli_bgGlobal Warming (CEOI18_glo)C++20
10 / 100
89 ms14404 KiB
#include <bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; #define int long long typedef pair<int,int> pii; typedef vector<int> vi; typedef vector<pii> vii; typedef vector<bool> vb; typedef long long ll; typedef pair<ll,ll> pll; typedef vector<pll> vll; typedef tree<pii,null_type,less<pii>,rb_tree_tag, tree_order_statistics_node_update> oset; #define fi first #define se second #define pb push_back #define pf push_front #define mid (l+r)/2 #define all(x) x.begin(),x.end() #define FOR(i,a) for(int i=0;i<(a);i++) #define FORE(i,a,b) for(int i=(a);i<(b);i++) #define cont(x) for(auto el:x) cout<<el<<' ';cout<<endl; #define contp(x) for(auto el:x) cout<<el.fi<<'-'<<el.se<<' ';cout<<endl; #define sp <<" "<< #define DEBUG(x) cout<<(#x) sp x<<endl #define carp(a,b) (((a%MOD)*(b%MOD))%MOD) #define topla(a,b) (((a%MOD)+(b%MOD))%MOD) const ll INF=1e18; const int MAXN=505; const int MAXK=30; const int MOD=1e9+7; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,x; cin>>n>>x; vi a(n+1); FORE(i,1,n+1) cin>>a[i]; set<pii> s; int bas,son; bas=son=1; int tut1,tut2; tut1=tut2=0; FORE(i,1,n+1){ if(s.empty()){ s.insert({a[i],i}); bas=s.begin()->se; son=i; tut1=s.begin()->fi; tut2=a[i]; } else{ auto it=s.upper_bound({a[i],0}); auto it2=s.end(); it2--; if(it!=s.end()){ bool f=(it==it2); s.erase(*it); s.insert({a[i],i}); if(f){ bas=s.begin()->se; son=i; tut1=s.begin()->fi; tut2=a[i]; } } else{ s.insert({a[i],i}); bas=s.begin()->se; son=i; tut1=s.begin()->fi; tut2=a[i]; } } } //contp(s); int ans=s.size(); set<pii> bir,iki; int say1,say2; say1=say2=0; FORE(i,1,bas){ if(bir.empty()){ bir.insert({a[i],i}); } else{ auto it=bir.upper_bound({a[i],0}); if(it!=bir.end()){ bir.erase(*it); } bir.insert({a[i],i}); } } //contp(bir); for(auto el:bir){ if(el.fi-x < tut1) say1++; } FORE(i,son+1,n+1){ if(iki.empty()){ iki.insert({a[i],i}); } else{ auto it=iki.upper_bound({a[i],0}); if(it!=iki.end()){ iki.erase(*it); } iki.insert({a[i],i}); } } //contp(iki); for(auto el:iki){ if(el.fi+x > tut2) say2++; } cout<<ans+max(say1,say2)<<endl; }
#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...