제출 #583210

#제출 시각아이디문제언어결과실행 시간메모리
583210Mr_HusanboyGlobal Warming (CEOI18_glo)C++14
62 / 100
48 ms15476 KiB
// Muallif: Mansuraliyev Husanboy Murotali o'g'li >> NamPS #pragma GCC optimize("Ofast") #include<bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long #define ios ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL) #define all(a) a.begin(), a.end() #define F first #define S second #define fp(a,i,c) for(int (a) = (i); (a) < (c); (a)++) #define fm(a,i,c) for(int (a) = (i); (a) >= (c); (a)--) #define vii vector<int> #define vll vector<ll> // 0-9 >> 48-57; A-Z>>65-90 and a-z>>97-122 respectively; int BS(std::vector<int>& v, int l, int r, int key) { while (r - l > 1) { int m = l + (r - l) / 2; if (v[m] >= key) r = m; else l = m; } return r; } void solve(){ ll n; cin>>n; //t.resize(4*n); vll a;a.resize(n); ll x; cin>>x; for(ll i=0;i<n;i++) cin>>a[i]; // set<ll> st; vector<int> last(n,0); int length=1; vector<pair<ll,ll>> l(n),r(n); last[0]=a[0]; l[0]={1,a[0]}; for(int i=1;i<n;i++){ if(a[i]<last[0]){ last[0]=a[i]; }else if(a[i]>last[length-1]){ last[length++]=a[i]; }else{ last[BS(last,-1,length-1,a[i])]=a[i]; } l[i]={length,last[length-1]-x}; } last.assign(n,0); last[0]=-a[n-1]; length=1; r[n-1]={1,a[n-1]}; for(ll i=n-2;i>=0;i--){ if(-a[i]<last[0]){ last[0]=-a[i]; }else if(-a[i]>last[length-1]){ last[length++]=-a[i]; }else last[BS(last,-1,length-1,-a[i])]=-a[i]; r[i]={length,-last[length-1]}; } // for(auto u:r) cout<<u.F<<' '<<u.S<<endl; vector<ll> close(n); r.push_back({0,1e10}); stack<ll> s; s.push(n); for(ll i=n-1;i>=0;i--){ while(r[s.top()].S<=l[i].S) s.pop(); //cout<<l[i].S<<" "<<r[s.top()].S<<"\n"; close[i]=s.top(); s.push(i); } ll ans=0; for(ll i=0;i<n;i++){ ans=max(ans,l[i].F+r[close[i]].F); } cout<<ans; } int main(){ ios; // int t; cin>>t; while(t--) solve(); }
#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...