Submission #1155745

#TimeUsernameProblemLanguageResultExecution timeMemory
1155745dostsMoney (IZhO17_money)C++20
100 / 100
121 ms23880 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2") using namespace std; #define int long long #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(cont) cont.begin(),cont.end() #define vi vector<int> const int inf = 1e18,N = 3e3+1,MOD = 998244353; struct FT { vi bit; int n; int sz = 0; FT(int nn) { n = nn; bit.assign(nn+1,0); } void put(int p,int v) { sz+=v; for (int i = p;i<=n;i+=i&-i) bit[i]+=v; } int get(int p) { int ans = 0; for (int i = p;i>0;i-=i&-i) ans+=bit[i]; return ans; } int get(int l,int r) { if (l > r) return 0; return get(r)-get(l-1); } } ft(1000000); void solve() { int n; cin >> n; vi a(n+1); for (int i=1;i<=n;i++) cin >> a[i]; int srtd[n+1]; srtd[n] = n; for (int i = n-1;i>=1;i--) { srtd[i] = ((a[i] <= a[i+1])?(srtd[i+1]):(i)); } int ans = 0; for (int i=1;i<=n;) { ans++; int l = i; int r = srtd[i]; while (l<=r) { int m = (l+r) >> 1; int L = a[i],R = a[m]; if (ft.get(L+1,R-1)) r = m-1; else l = m+1; } for (int j = i;j<=r;j++) ft.put(a[j],1); i = r+1; } cout << ans << '\n'; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifdef Dodi freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; //cin >> t; while (t --> 0) 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...