?
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
92789040 |
Practice: mr_anderson99 |
846C - 16 | C++17 (GCC 7-32) | Accepted | 31 ms | 4308 KB | 2020-09-14 15:52:46 | 2020-09-14 15:52:46 |
#include <bits/stdc++.h> #include <stdio.h> #include <algorithm> using namespace std; #define rep(i,a,b) for (ll i = a; i < b; i++) #define rrep(i,a,b) for (ll i = a; i >= b; i--) //#define l(s) s.length() #define sort(v) sort(v.begin(), v.end()); #define scan(v,n) rep(i,0,n) {ll k; cin >> k; v.pb(k);} #define print(v,n) {rep(i,0,n) cout << v[i] << " "; cout << endl;} #define printstr(s,n) {rep(i,0,n) cout << s[i]; cout << endl;} #define rev(a) reverse(a.begin(), a.end()); #define pb push_back typedef long long ll; typedef long double lld; typedef vector<pair<ll,ll>> vpi; typedef vector<ll> vi; const ll mxN=3e3; const ll N=505; const ll INF=1e18; ll dp[N][N], mn[N][N], sub[4]; void solve() { int n; cin >> n; pair<int, int> pr={-1,-1}; vi v,suf(n),Suf(n); vpi kad(n); scan(v,n); //try kadane and suffix sum simultaneously ll yo=0, mx=0, late=n-1, temp=0; rrep(i,n-1,0) { temp+=v[i]; if(yo<=0) {yo=0; late=i;} yo+=v[i]; if(yo>mx) {pr={i,late}; mx=yo;} Suf[i]=temp-mx; kad[i]=pr; } ll ans=0, a1=n, a2=n, a3=n; rep(i,0,n) { if(Suf[i]<ans) { a1=i; if(kad[i].first!=-1) {a2=kad[i].first; a3=kad[i].second+1;} ans=Suf[i]; } } cout << a1 << " " << a2 << " " << a3 << endl << endl; //print(Suf,n); //for(auto k:kad) cout << k.first << " " << k.second << endl; } int main() { int t=1;// cin >> t; while(t--) solve(); return 0; }
?
?
?
?