Submission #1284405

#TimeUsernameProblemLanguageResultExecution timeMemory
1284405JohanMoney (IZhO17_money)C++20
100 / 100
110 ms8188 KiB
#pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #pragma GCC optimize("-fgcse") #pragma GCC optimize("-fgcse-lm") #pragma GCC optimize("-fipa-sra") #pragma GCC optimize("-ftree-pre") #pragma GCC optimize("-ftree-vrp") #pragma GCC optimize("-fpeephole2") #pragma GCC optimize("-ffast-math") #pragma GCC optimize("-fsched-spec") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-falign-jumps") #pragma GCC optimize("-falign-loops") #pragma GCC optimize("-falign-labels") #pragma GCC optimize("-fdevirtualize") #pragma GCC optimize("-fcaller-saves") #pragma GCC optimize("-fcrossjumping") #pragma GCC optimize("-fthread-jumps") #pragma GCC optimize("-funroll-loops") #pragma GCC optimize("-freorder-blocks") #pragma GCC optimize("-fschedule-insns") #pragma GCC optimize("inline-functions") #pragma GCC optimize("-ftree-tail-merge") #pragma GCC optimize("-fschedule-insns2") #pragma GCC optimize("-fstrict-aliasing") #pragma GCC optimize("-falign-functions") #pragma GCC optimize("-fcse-follow-jumps") #pragma GCC optimize("-fsched-interblock") #pragma GCC optimize("-fpartial-inlining") #pragma GCC optimize("no-stack-protector") #pragma GCC optimize("-freorder-functions") #pragma GCC optimize("-findirect-inlining") #pragma GCC optimize("-fhoist-adjacent-loads") #pragma GCC optimize("-frerun-cse-after-loop") #pragma GCC optimize("inline-small-functions") #pragma GCC optimize("-finline-small-functions") #pragma GCC optimize("-ftree-switch-conversion") #pragma GCC optimize("-foptimize-sibling-calls") #pragma GCC optimize("-fexpensive-optimizations") #pragma GCC optimize("inline-functions-called-once") #pragma GCC optimize("-fdelete-null-pointer-checks") #include<bits/stdc++.h> using namespace std; struct BIT { int n; vector < int > fw; BIT (int n) : n(n){ fw.assign(n + 1, 0); } void upd(int idx, int val){ while(idx <= n){ fw[idx] += val; idx += (idx & -idx); } } int ask(int idx){ int rs = 0; while(idx > 0){ rs += fw[idx]; idx -= (idx & -idx); } return rs; } int get(int l, int r){ if(l > r)return 0; return ask(r) - ask(l - 1); } }; int main(){ // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; int a[n + 1], idx = 1; for(int i = 1; i <= n; i++) cin >> a[i]; BIT fw(1e6); fw.upd(a[1], 1); for(int i = 2; i <= n; i++){ if(a[i] < a[i - 1])break; if(!fw.get(a[i], a[i]))fw.upd(a[i], 1); idx = i; } int ans = 1; vector < int > cur{a[idx + 1]}; for(int i = idx + 2; i <= n; i++){ if(a[i] < a[i - 1]){ for(auto j : cur){ if(!fw.get(j, j)) fw.upd(j, 1); } cur = {a[i]}; ans++; continue; } cur.push_back(a[i]); int chk = fw.get(cur[0] + 1, cur.back() - 1); if(chk > 0){ cur.pop_back(); for(auto j : cur){ if(!fw.get(j, j)) fw.upd(j, 1); } cur = {a[i]}; ans++; } } cout << ans + 1 << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...