Skip to content

Commit 26a4a3c

Browse files
Create Pchelyonok and Segments.cpp
1 parent e108197 commit 26a4a3c

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#include <iostream>
2+
#include <vector>
3+
4+
using namespace std;
5+
6+
long long get_largest_k(long long n)
7+
{
8+
long long right = n, left = 1;
9+
10+
while(right - left > 1)
11+
{
12+
long long mid = (left + right)/2;
13+
14+
if(mid*1LL*(mid + 1) <= 2*n)
15+
{
16+
left = mid;
17+
}
18+
else
19+
{
20+
right = mid;
21+
}
22+
}
23+
24+
return left;
25+
}
26+
27+
void solve()
28+
{
29+
int no_of_elements;
30+
cin >> no_of_elements;
31+
32+
vector <long long> A(no_of_elements + 5, 0);
33+
for(int i = 1; i <= no_of_elements; i++)
34+
{
35+
cin >> A[i];
36+
}
37+
38+
vector <long long> sum_from(no_of_elements + 5, 0);
39+
for(int i = no_of_elements; i >= 1; i--)
40+
{
41+
sum_from[i] = A[i] + sum_from[i + 1];
42+
}
43+
44+
long long max_k = get_largest_k(no_of_elements);
45+
46+
vector <vector <long long> > max_segment_sum(no_of_elements + 5, vector <long long> (max_k + 1));
47+
for(int i = no_of_elements; i >= 1; i--)
48+
{
49+
for(int segment_size = 1; segment_size <= max_k; segment_size++)
50+
{
51+
max_segment_sum[i][segment_size] = max_segment_sum[i + 1][segment_size];
52+
53+
if(i + segment_size - 1 > no_of_elements)
54+
{
55+
continue;
56+
}
57+
58+
long long sum_here = sum_from[i] - sum_from[i + segment_size];
59+
60+
if(segment_size == 1 || sum_here < max_segment_sum[i + segment_size][segment_size - 1])
61+
{
62+
max_segment_sum[i][segment_size] = max(max_segment_sum[i][segment_size], sum_here);
63+
}
64+
}
65+
}
66+
67+
int answer = 0;
68+
for(int segment_size = max_k; segment_size >= 1; segment_size--)
69+
{
70+
if(max_segment_sum[1][segment_size] > 0)
71+
{
72+
answer = segment_size;
73+
break;
74+
}
75+
}
76+
77+
cout << answer << "\n";
78+
}
79+
80+
int main()
81+
{
82+
int no_of_test_cases;
83+
cin >> no_of_test_cases;
84+
85+
while(no_of_test_cases--)
86+
solve();
87+
88+
return 0;
89+
}

0 commit comments

Comments
 (0)