Submission #1002889

#TimeUsernameProblemLanguageResultExecution timeMemory
1002889LalicCigle (COI21_cigle)C++17
48 / 100
1075 ms363508 KiB
#include <bits/stdc++.h> #pragma GCC optimize "O3,unroll-loops" using namespace std; #define fi first #define se second #define pb push_back #define all(x) x.begin(), x.end() #define allr(x) x.rbegin(), x.rend() #define mp make_pair #define int long long typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef complex<double> cd; const int MAXN = 5e3+10; const int MOD = 1e9+7; const int INF = 0x3f3f3f3f; const ll LINF = 0x3f3f3f3f3f3f3f3f; const double PI = acos(-1); int tree[MAXN][4*MAXN], lazy[MAXN][4*MAXN]; void lazyP(int id, int node, int l, int r){ if(!lazy[id][node]) return; tree[id][node]+=lazy[id][node]; if(l!=r){ lazy[id][node*2]+=lazy[id][node]; lazy[id][node*2+1]+=lazy[id][node]; } lazy[id][node]=0; } void upd(int id, int node, int l, int r, int p, int q, int val){ lazyP(id, node, l, r); if(r<p || l>q) return; if(l>=p && r<=q){ lazy[id][node]+=val; lazyP(id, node, l, r); return; } int mid=(l+r)>>1; upd(id, node*2, l, mid, p, q, val); upd(id, node*2+1, mid+1, r, p, q, val); tree[id][node]=max(tree[id][node*2], tree[id][node*2+1]); } int query(int id, int node, int l, int r, int p, int q){ lazyP(id, node, l, r); if(r<p || l>q) return 0; if(l>=p && r<=q) return tree[id][node]; int mid=(l+r)>>1; return max(query(id, node*2, l, mid, p, q), query(id, node*2+1, mid+1, r, p, q)); } void solve(){ int n; cin >> n; vector<int> arr(n+1); for(int i=1;i<=n;i++) cin >> arr[i]; for(int i=3;i<=n;i++){ int sum=arr[i], c2=i-2, tot=arr[i-1]; for(int c1=i-1;c1>=0;c1--){ upd(i, 1, 0, n, c1, c1, query(c1, 1, 0, n, 0, n)); while(c2>0 && tot<sum){ tot+=arr[c2]; c2--; } if(tot==sum && c2>0) upd(c1, 1, 0, n, 0, c2-1, 1); sum+=arr[c1]; tot-=arr[c1]; } } cout << query(n, 1, 0, n, 0, n) << "\n"; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int tt=1; //~ cin >> tt; while(tt--) solve(); return 0; }
#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...