Submission #1160571

#TimeUsernameProblemLanguageResultExecution timeMemory
1160571ImperialALENBigger segments (IZhO19_segments)C++20
100 / 100
126 ms28032 KiB
// #pragma GCC optomize ("Ofast") // #pragma GCC optomize ("unroll-loops") // #pragma GCC target ("avx,avx2,fma") #include <bits/stdc++.h> #define F first #define S second #define ll long long #define int long long #define pb push_back #define all(x) (x.begin(),x.end()) #define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); using namespace std; const ll N = 5e5+9, INF = 1e18 , inf = 1e9+9, mod = 1e9+9; int n; int a[N]; int dp[N]; int pref[N]; vector<int>t(N*4,INF); void upd(int ind,int val,int u=1,int ul=1,int ur=n){ if(ul==ur){ t[u]=val; return; } int um=(ul+ur)/2; if(ind<=um)upd(ind,val,u*2,ul,um); else upd(ind,val,u*2+1,um+1,ur); t[u]=min(t[u*2],t[u*2+1]); } int get(int x,int u=1,int ul=1,int ur=n){ if(ul==ur)return ul; int um=(ul+ur)/2; if(t[u*2+1]<=x){ return get(x,u*2+1,um+1,ur); }else return get(x,u*2,ul,um); } signed main(){ ios; int tt=1; // cin>>tt; while(tt--){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; pref[i]=pref[i-1]+a[i]; } for(int i=1;i<=n;i++){ int j=0; if(t[1]<=pref[i])j=get(pref[i]); dp[i]=dp[j]+1; // cout<<j<<" "<<pref[i]+(pref[i]-pref[j])<<'\n'; upd(i,pref[i]+(pref[i]-pref[j])); } cout<<dp[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...
#Verdict Execution timeMemoryGrader output
Fetching results...