Submission #395833

#TimeUsernameProblemLanguageResultExecution timeMemory
395833Pichon5Global Warming (CEOI18_glo)C++17
0 / 100
98 ms3552 KiB
#include<bits/stdc++.h> #include <chrono> #include <thread> #define lcm(a,b) (a/__gcd(a,b))*b #define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define ll long long int #define vi vector<int> #define vll vector<ll> #define pb push_back #define F first #define S second #define mp make_pair //salida rapida "\n" //DECIMALES fixed<<sp(n)<<x<<endl; //gcd(a,b)= ax + by //lCB x&-x //set.erase(it) - ersases the element present at the required index//auto it = s.find(element) //set.find(element) - iterator pointing to the given element if it is present else return pointer pointing to set.end() //set.lower_bound(element) - iterator pointing to element greater than or equal to the given element //set.upper_bound(element) - iterator pointing to element greater than the given element // | ^ //__builtin_popcount(x) using namespace std; const int INF=2*1e9+7; int main() { int n,k,x; cin>>n>>k; vi v; int res=0; for(int i=0;i<n;i++){ cin>>x; v.pb(x); } vi E(n+1); vll dp(n+2,INF); dp[0]=-INF; for(int i=0;i<n;i++){ int b=1,e=n; while(b<=e){ int mid=(b+e)/2; if(v[i]<=dp[mid] && dp[i-1]<v[mid]){ dp[mid]=v[i]; res=max(res,mid); E[i]=mid;break; } if(dp[mid]>v[i]){ e=mid-1; }else{ b=mid+1; } } } dp.assign(n+2,INF); dp[0]=-INF; for(int i=n-1;i>=0;i--){ int b=1,e=n; int val=-v[i]+k;//le reduzco a todo el prefijo i, eso es darle ventaja a i sobre el sufijo while(b<=e){ int mid=(b+e)/2; if(val<v[mid] && dp[mid-1]<val){ res=max(res,E[i]+mid-1); break; } if(dp[mid]>val){ e=mid-1; }else{ b=mid+1; } } val=-v[i]; while(b<=e){ int mid=(b+e)/2; if(val<v[mid] && dp[mid-1]<val){ dp[mid]=val; break; } if(dp[mid]>val){ e=mid-1; }else{ b=mid+1; } } } cout<<res<<endl; return 0; } //409336628
#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...