제출 #1313198

#제출 시각아이디문제언어결과실행 시간메모리
1313198boclobanchatBigger segments (IZhO19_segments)C++20
13 / 100
1 ms332 KiB
#include<bits/stdc++.h> using namespace std; struct node { int child[2],val; }; const int MAXN=5e5+5; long long pref[MAXN]; pair<int,long long> dp[MAXN]; node trie[MAXN*36]; int cntnode=1; void ins(int val,int idx) { int pos=1; for(int i=30;i+1;i--) { int a=(val>>i)%2; if(!trie[pos].child[a]) trie[pos].child[a]=++cntnode; pos=trie[pos].child[a],trie[pos].val=idx; } } int get(int val) { int ans=0,pos=1; for(int i=30;i+1;i--) { int a=(val>>i)%2; if(a&&trie[pos].child[0]) ans=max(ans,trie[trie[pos].child[0]].val); if(!trie[pos].child[a]) return ans; pos=trie[pos].child[a]; } ans=max(ans,trie[pos].val); return ans; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i=1;i<=n;i++) { cin>>pref[i]; pref[i]+=pref[i-1]; } for(int i=1;i<=n;i++) { ins(pref[i-1]+dp[i-1].second,i-1); int pos=get(pref[i]); dp[i]={dp[pos].first+1,pref[i]-pref[pos]}; } cout<<dp[n].first; }
#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...