Submission #441179

#TimeUsernameProblemLanguageResultExecution timeMemory
441179leakedMoney (IZhO17_money)C++14
45 / 100
1574 ms70720 KiB
#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> #pragma GCC optimize("-O3") #pragma GCC optimize("no-stack-protector") #pragma GCC optimize("fast-math") #pragma GCC optimize("Ofast") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx") #pragma GCC target("avx,avx2,fma") #pragma GCC optimization ("unroll-loops") using namespace std; #define sim template < class c #define ris return * this #define dor > debug & operator << #define eni(x) sim > typename \ enable_if<sizeof dud<c>(0) x 1, debug&>::type operator<<(c i) { sim > struct rge { c b, e; }; sim > rge<c> range(c i, c j) { return rge<c>{i, j}; } sim > auto dud(c* x) -> decltype(cerr << *x, 0); sim > char dud(...); struct debug { #ifndef LOCAL ~debug() { cerr << endl; } eni(!=) cerr << boolalpha << i; ris; } eni(==) ris << range(begin(i), end(i)); } sim, class b dor(pair < b, c > d) { ris << "(" << d.first << ", " << d.second << ")"; } sim dor(rge<c> d) { *this << "["; for (auto it = d.b; it != d.e; ++it) *this << ", " + 2 * (it == d.b) << *it; ris << "]"; } #else sim dor(const c&) { ris; } #endif }; #define imie(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] " //using namespace __gnu_pbds; #define fast_io ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr); #define vec vector #define getin freopen("input.txt","r",stdin); #define getout ofstream cout("output.txt"); #define getfiles getin;getout #define m_p make_pair #define f first #define sz(x) (int)x.size() #define pw(x) (1LL<<x) #define pb push_back #define endl '\n' #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define s second typedef pair<int,int> pii; typedef long long ll; typedef unsigned long long ull; typedef pair<ll,ll> pll; typedef pair<ll,int> pli; typedef pair<int,ll> pil; typedef long double ld; template<typename T>bool umax(T &a,const T &b) {return (a<b?a=b,1:0);} template<typename T>bool umin(T &a,const T &b) {return (a>b?a=b,1:0);} const int lg=20; const int N=1e6+1; int a[N]; int n; int uk[N]; deque<pii>dq1,dq2; void add1(pii v){ while(sz(dq1) && dq1.back().f<v.f){ dq1.pop_back(); } dq1.push_back(v); } void era1(pii v){ assert(sz(dq1)); if(dq1.front()==v) dq1.pop_front(); } void add2(pii v){ while(sz(dq2) && dq2.back().f>v.f){ dq2.pop_back(); } dq2.push_back(v); } void era2(pii v){ assert(sz(dq2)); if(dq2.front()==v) dq2.pop_front(); } int t[4*N]; void upd(int id,int x,int v,int tl,int tr){ if(tl==tr){ t[v]=x; return; } int tm=(tl+tr)>>1; if(tm>=id) upd(id,x,2*v,tl,tm); else upd(id,x,2*v+1,tm+1,tr); t[v]=min(t[2*v],t[2*v+1]); } int get(int l,int r,int v,int tl,int tr){ if(tl>=l && tr<=r){ return t[v]; } if(tl>r || tr<l){ return 2e9; } int tm=(tl+tr)>>1; return min(get(l,r,2*v,tl,tm),get(l,r,2*v+1,tm+1,tr)); } signed main(){ fast_io; // ifstream cin("money.in"); // ofstream cout("money.out"); cin>>n; for(int i=0;i<n;i++) cin>>a[i]; int l=0; set<int>st; auto ok=[&](){ int x=dq2.front().f,y=dq1.front().f; // debug()<<imie(x)imie(y)imie(l); auto it=st.upper_bound(x); if(it!=st.end() && *it<y){ return 0; } return 1; }; for(int i=0;i<n;i++){ add1({a[i],i}); add2({a[i],i}); while(!ok() || a[i]!=dq1.front().f){ era1({a[l],l}); era2({a[l],l}); st.insert(a[l]); l++; } uk[i]=l; } fill(t,t+4*N,2e9); upd(0,0,1,0,n); for(int i=0;i<n;i++){ int vl=get(uk[i],n,1,0,n); // debug()<<imie(uk[i]); upd(i+1,vl+1,1,0,n); } cout<<get(n,n,1,0,n); return 0; } /* 1 4 2 0110 */

Compilation message (stderr)

money.cpp:10: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
   10 |     #pragma GCC optimization ("unroll-loops")
      |
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...