Submission #336318

#TimeUsernameProblemLanguageResultExecution timeMemory
336318tengiz05Bigger segments (IZhO19_segments)C++17
37 / 100
618 ms133484 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define FASTIO ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); #define all(x) (x).begin(), (x).end() #define pb push_back #define pii pair<int, int> #define ff first #define ss second #define PI acos(-1) #define ld long double const int mod = 1e9+7, N = 5005, inf = 1e18; int msb(int val){return sizeof(int)*8-__builtin_clzll(val);} int a[N], n, m, k; vector<pii> dp[N]; int pr[N]; vector<int> pm[N]; void solve(int test_case){ int i, j; cin >> n; for(i=1;i<=n;i++){ cin >> a[i]; pr[i]=a[i];pr[i]+=pr[i-1]; } for(i=1;i<=n;i++){ dp[i].pb({pr[i], 1}); dp[i].pb({inf, -213234684}); pm[i].pb(dp[i][0].ss); for(j=1;j<dp[i].size();j++)pm[i].pb(max(pm[i].back(), dp[i][j].ss)); } for(i=2;i<=n;i++){ for(j=1;j<i;j++){ int s = pr[i]-pr[j]; int pos = upper_bound(all(dp[j]), pii{s+1,-1})-dp[j].begin();pos--; /* cout << "the sum is " << s << '\n'; cout << dp[j][pos+1].ff << " <- was this\n"; cout << pos << '\n';*/ int mx=0; if(pos<0)continue; /* bool f = false; //if(i == 5)cout << s << '\n'; for(k=0;k<=pos;k++){ if(dp[j][k].ff > s)continue; mx = max(mx, dp[j][k].ss);f=true; //if(i==5)cout << dp[j][k].ff << ' ' << dp[j][k].ss << '\n'; }*/ int mx2 = pm[j][pos]; // cout << mx << ' ' << mx2 << '\n'; dp[i].pb({s, mx2+1}); }sort(all(dp[i])); pm[i].clear(); pm[i].pb(dp[i][0].ss); for(j=1;j<dp[i].size();j++)pm[i].pb(max(pm[i].back(), dp[i][j].ss)); } /* for(i=1;i<=n;i++){ cout << "doing " << i<< '\n'; for(auto [x, y] : dp[i]){ cout << x << ' ' << y << '\n'; } }*/ int ans = 1; for(auto [x, y] : dp[n]){ ans = max(ans, y); } cout << ans << '\n'; return; } signed main(){ FASTIO; #define MULTITEST 0 #if MULTITEST int ___T; cin >> ___T; for(int T_CASE = 1; T_CASE <= ___T; T_CASE++) solve(T_CASE); #else solve(1); #endif return 0; }

Compilation message (stderr)

segments.cpp: In function 'void solve(long long int)':
segments.cpp:29:12: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |   for(j=1;j<dp[i].size();j++)pm[i].pb(max(pm[i].back(), dp[i][j].ss));
      |           ~^~~~~~~~~~~~~
segments.cpp:38:8: warning: unused variable 'mx' [-Wunused-variable]
   38 |    int mx=0;
      |        ^~
segments.cpp:53:12: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |   for(j=1;j<dp[i].size();j++)pm[i].pb(max(pm[i].back(), dp[i][j].ss));
      |           ~^~~~~~~~~~~~~
#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...