Блог пользователя paulzrm

Автор paulzrm, история, 9 месяцев назад, По-английски

2173A-Sleeping Through Classes Idea & Solution: HHH666666

Tutorial
Solution

2173B-Niko's Tactical Cards Idea & Solution: HHH666666

Hint 1
Hint 2
Tutorial
Solution

2173C-Kanade's Perfect Multiples Idea & Solution: paulzrm

Hint 1
Hint 2
Tutorial
Solution

2173D-Taiga's Carry Chains Idea: chen_zida Solution: paulzrm

Hint 1
Hint 2
Tutorial
Solution

2173E-Shiro's Mirror Duel Idea & Solution: paulzrm It's my favourite problem :-)

Hint 1
Hint 2
Tutorial
Solution

2173F-Isla's Memory Thresholds Idea & Solution: paulzrm

Tutorial
Solution
Bonus
Разбор задач Codeforces Round 1068 (Div. 2)
  • Проголосовать: нравится
  • +123
  • Проголосовать: не нравится

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by paulzrm (previous revision, new revision, compare).

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится +17 Проголосовать: не нравится

It's great to see another sqrt problem appearing in the round.

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

thanks for quick editorial and nice problems

»
9 месяцев назад, скрыть # |
Rev. 3  
Проголосовать: нравится +2 Проголосовать: не нравится

.

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

If you ain't getting the code for C in editorial (if you are low like me idk) :

Refer this

»
9 месяцев назад, скрыть # |
Rev. 2  
Проголосовать: нравится +1 Проголосовать: не нравится

Luckily I didn't waste time on D initially and skipped to E.

Solved E within 20 minutes ( including Logic + Coding ).

I went in wrong direction in D. kept using BFS, and tried to prune branches in BFS. but kept failing.

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится

it's said in the editorial for F that x <= n even though x <= 10^9

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by paulzrm (previous revision, new revision, compare).

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

Seems to me you forgot to mention fixing middle element in case of odd $$$n$$$ in E's tutorial. In current state editorial is factually incorrect, if $$$pos[x]$$$ is at exact middle, one of the two swaps doesnt make $$$x$$$ and $$$n+1-x$$$ symmetrical.

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится +16 Проголосовать: не нравится

For problem D: since $$$\log_2 n$$$ is small, dp is not needed. An $$$O(\sqrt{n})$$$ solution 352084821 can also pass.

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by paulzrm (previous revision, new revision, compare).

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can someone help me debug my E code: https://codeforces.me/contest/2173/submission/352087156

It gives me wrong answer Test 13: finished but permutation is not identity. (test case 13)

The idea i tried to implement is whenever i encounter an index when i!=p[i] i will keep query to swap i and p[i] till number of swaps for i and p[i] is odd so i put current p[i] in correct place and the number of swaps for n-i+1 and n-p[i]+1 is even i,e no change on there value

ik this solution would probably make more than intended number of queries but what i am not able to understand is how I am getting finished but permutation is not identity.

Any help is appreciated thanks!

»
9 месяцев назад, скрыть # |
Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

2173

Whats wrong with this solution of mine for problem D?

Idea: Maximum carries occur when adding to a long chain of consecutive 1s. Spend first (k-1) moves creating the longest possible chain of 1s by adding to zeros between 1-blocks. Last move: add 2^ℓ at chain start → carries = chain length.

Example:

n = 13 (1101), k = 2:

Move 1: Add 2^1 → 1111

Move 2: Add 2^0 → 10000 (4 carries, chain length 4).

Total = 4. Use sliding window to find max chain length with (k-1) flips, then compute total carries over all moves.

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

D and E are amazing!!! I love them.

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится

bro i couldnt even solve a single question in this contest. been grinding for past 10 days, this demotivated me a lot

  • »
    »
    9 месяцев назад, скрыть # ^ |
     
    Проголосовать: нравится +1 Проголосовать: не нравится

    keep going!

  • »
    »
    9 месяцев назад, скрыть # ^ |
     
    Проголосовать: нравится +1 Проголосовать: не нравится

    It's ok, keep going even if you feel stuck, one day it's going to click.

    also, a very good advice someone told me is, when you are training try not just to learn how to solve this specific problem, but think of what general techniques used to solve this problem that can be used to solve other problems

    for example, if a problem asks how many zeros you can take, you can "think in reverse" and say how many zeros I can't take? this is like a general idea that makes many problems easier, so try to catch those while training, and after a while, your mind works using the ideas you learned naturally

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can anyone please tell whats wrong with my greedy code (352103241) for Problem D.

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится +40 Проголосовать: не нравится

Problem F.

Bonus There exists an $$$O(n\sqrt{n})$$$ solution.

I’m interested in this solution. Are there any hints or references?

  • »
    »
    9 месяцев назад, скрыть # ^ |
     
    Проголосовать: нравится +17 Проголосовать: не нравится

    You can replace the binary search with the following approach: first perform exponential search to find the appropriate interval, and once the length is determined to lie between $$$2^k$$$ and $$$2^{k+1}$$$, perform a binary search within that interval. With this modification, the analysis yields a running time of $$$O(n\sqrt{n})$$$.

    • »
      »
      »
      9 месяцев назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      It took me a while to think why it works, but it actually works.

      My sketch
  • »
    »
    9 месяцев назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    I think maybe we can just leave out the binary search in the second part as we know the length will be > sqrt(n) and we sum of length of each step is limited to n so we can move atmost sqrt(n) time

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

i missed the first one by one edge case damnn

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

thank you for this contest and fast editorial

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

In C, what if we have an array of all primes? Wouldn't this solution get tle?

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Love problem C !

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

can someone explain : finished but permutation is not identity . thanks

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I’m looking to join a consistent and active CP peer group to practice regularly, discuss problem-solving approaches, and improve together.

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

There is a simpler idea for E. Let X be a number of correctly placed numbers. At each step just calculate for each pair of indices (i, j) a math expectation of X after a swap. Greedily select a pair of indices with best expectation. In order to don't get TL, don't try every pair, but for each index i try only "reasonable" indices j, which are: 1) an index at which current i's number should be; 2) an index at which number i stays now. That's it. Implementation: https://codeforces.me/contest/2173/submission/352126084

»
9 месяцев назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Problem E is so interesting! I thought I need to put smaller number on left part (after grouping), but that actually will result in limit excess.

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Was I the only one who felt problem statement of A wasn't that clear? according to me 110 k=1, answer should've been 1 but problem statement meant different of what I understood.

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Loved Problem C!

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

I solved D with greedy : submission. Not the most optimal approach but i found it very intuitive.

So the main idea behind it was that if you pick a set of consecutive 0s and decide to set any one of these bits (by adding 2^x) then in the optimal case all of the 0s should be set (so that they connect 2 set of consecutive 1s). So i just brute forced using bitmasks by selecting which sets of 0s i will completely set, and then greedily took the biggest set of consecutive 1s from the new number formed based on how much k i have left after setting the selected consecutive 0s.

The max number of consecutive 0s can be 15 (alternate 0 1 0 1 => max = 30/2), so my code might take upto 15 * 2^15 * 1000 operations(as t <= 1000) which is roughly 5 * 10^8. It passed with a total time of 1.2s. Let me know if you are able to hack it!

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

interesting contest. i could have solved D if i had passed C faster, but the time was limited. qwq

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can anyone explain the DP for D? I understand why we want to minimize the number of bits by the end, but I can't wrap my head around the DP to actually achieve that.

  • »
    »
    9 месяцев назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится +1 Проголосовать: не нравится

    The point is to not think about how dp[i][j][k] is formed, but form the next states based on what you already have.

    Notice that adding 2^j on the same index is never beneficial, coz we already know k < total_bits and once you use a 2^j there is definitely an other index where you can use to get more carries.

    Suppose you are at the ith bit having used j operations of adding 2^j on bits before the ith bit, now there are two possible cases-

    1) You use the operation(add a 2^j) on that bit which results in some carry. 2) You do not use operation on that bit.

    Simulate whatever carry you get and whatever bit stays in that position based on the carry will be added to the next state of the dp, because you are calculating dp[i][j][k] as the number of set bits.

    By the way dp[i][j][k] is defined as reaching the ith LSB using the addition of 2^l j times on bits before the ith one and having a carry of k. Note that k can never be greater than 1.

    Effectively your dp is just (bits + 1) * (k + 1) * 2 states

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I have a more concise way to write problem E that might be essentially the same as the editorial.

submission

If it is wrong, please tell me

»
9 месяцев назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

I'm not sure why this solution for problem E works: 352146525

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

In Problem E, I wasn’t initially sure why my solution got accepted 352174671. My approach is to keep swapping until the permutation becomes sorted, but I only move to the next index when the swap makes either the current position correct or the corresponding mirror position correct.

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Is there a greedy solution for D :

Along the following lines :

If K > number of zero between lsb and msb then we can always reach a power of 2 .

otherwise :

We know any blocks of 1 merging with another will only increase the size of the other block by 1 maximum .

so this leads to a greedy approach of always picking the maximum block length with careful tie breaking .

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

If you want to get in-depth understanding of problem B's solution,
Here is my video solution : Link. (It's in Hindi lang).

»
9 месяцев назад, скрыть # |
Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

I used a much more simple way to solve E.

My Code


The main part and the only part of mine is to place both i and n-i+1 in one round(caution here: not one operation), with just easily keeping swap them.

I think the expected times of this is 5m (m is the count of rounds).


After one (i, n-i+1) was done, I found that in the latter process(the part shown up there), we wouldn't adjust their position anymore when we optimize our operates.

Thus, all pairs of (i, n-i+1) pair is unrelated. And the last remained number can automatically get its position after other numbers are swapped to their own place, so m equals floor(n/2).

The total expected times of operates is 2.5n.


Proof is listed below:

Set expected operation of each round as E=E1+E2. (E1 is the expectation of swapping either i or n-i+1, while E2 is the expectation of another)

With some calculation, it's easy to find:

(1/2)+(1/2)*(E1+1)=E1

(1/2)+(1/2)*(E2+2)=E2

So E equals 5.

  • »
    »
    9 месяцев назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    can u explain ur calculation a bit more precisely ?

    • »
      »
      »
      9 месяцев назад, скрыть # ^ |
      Rev. 3  
      Проголосовать: нравится 0 Проголосовать: не нравится

      sure. and also you did remind me that I made sth wrong :p


      In the first step, the goal is to home one number.

      The possibility to finish it is 1/2.

      If it's not finished, it backed to the initial situation (and it requires another E1 operation in expectation).

      That's how I got 1+(1/2)*E1=E1.

      (another form is: (1/2)+(1/2)*(E1+1)=E1, and I made mistake on the (1/2)+ )


      In the second step, the goal is to home the another number.

      The possibility to finish it is also 1/2.

      But when it's not finished, the homed number in step 1 was out of its position. Specially, the positions of the two number now mirror, so it needs exactly 1 operation.

      That's how I got 1+(1/2)*(1+E2)=E2 (another form is: (1/2)+(1/2)*(E2+2)=E2 )


      I wrongly wrote my equation earlier. Sorry for the loose thinking.

    • »
      »
      »
      8 месяцев назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      For E, I was also trying to understand this (related) solution:

      vector<int> p(n + 1), pinv(n + 1);
      for (int i = 1; i <= n; ++i) {
      	scanf("%d", &p[i]);
      	pinv[p[i]] = i;
      }
      
      for (int l = 1; l <= n / 2; ++l) {
      	int r = n - l + 1;
      	while (l != p[l] || r != p[r]) {
      		int m = p[l] == l ? r : l;
      		printf("? %d %d\n", m, pinv[m]);
      		fflush(stdout);
      		int u, v;
      		scanf("%d%d", &u, &v);
      		swap(p[u], p[v]);
      		pinv[p[u]] = u;
      		pinv[p[v]] = v;
      	}
      }
      

      Analysis: Fix an iteration of the for loop. In expectation, we reach $$$p[\ell] = \ell$$$ after at most 2 swaps. After that, with probability $$$1/2$$$ we obtain $$$p[r] = r$$$ in 1 swap (in which case we are done), and with probability $$$1/2$$$ we go to a state such that $$$(\ell, \text{pinv}[\ell])$$$ and $$$(\text{pinv}[r], r)$$$ are mirrors of each other. In this special situation, it takes in expectation only 4 swaps to fix both $$$\ell$$$ and $$$r$$$. There are $$$n/2$$$ iterations of the main loop, so this is gives $$$\frac n 2 \cdot (2 + \frac 12(1 + 5)) =2.5n$$$ swaps in total.

»
9 месяцев назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Why is the complexity for C $$$O(nd(n)logn)$$$? I think, the worst case is input [2,3,4,…,k] and the answer is all primes. So we get the Sieve of Eratosthenes, which works in O(n) (*logn for set/map).

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Absolutely GOATED contest.

Despite messing up, I loved the problems, and thanks to whoever answered the questions for not spamming "No comments" to everything(No, I was not chatting mid contest)

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

You should have made the problem rating button, E is brilliant

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

https://codeforces.me/contest/2173/submission/352285205 why is this solution accepted? if k = 1e9 and a[i] = 1 this should give TLE right?

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

can someone explain how our answer is popcount(init_n) + k — popcount(final_n).(Problem D);

»
9 месяцев назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

in problem D, my $$$O(n2^{n/2})$$$ solution passed it lmao

maybe you should change the datarange to $$$n \lt 2^{64}$$$ or give the binary representation of $$$n$$$ xd

»
9 месяцев назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

In problem C, can someone provide suitable explanation on why finished cannot be element of the B. Let Assume x is still left and 2*x is not possible but there exist finished y which contain x as multiple this can be used..

»
9 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

D was a great one and took a lot of time to figure out the DP approach for it, was a bit lengthy too. The problem required to maximize the no of 1's with most bit flips for K bits, We calculate the maximum gain and the most no of 1s that we can get is k + the calculated gain..

While I was even streaming the whole contest and was even sharing my approach for each problem what I felt could be the best possible solution to it, it was a private stream supposed to be public when the contest was over even I dont know how my answer matched the same logic with 4-5 other participants...

Well I would keep this in my mind next time and would try to solve more since the only thing I feel that keeps me on the backfoot is the ability to solve under time pressure, if any of you guys can help me with that it would be great. Especially for problems that involve DP and in most common words with 2d DP it takes me much more time to reach an optimal state of solution as my answer.

»
8 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

During the thinking process for E, I came up with a naive idea similar to phase 2 in the editorial without phase 1 and the submission actually passed: Submission [without symmetry]. And I also found it hard to convince myself that phase 1 is really necessary, please hack or correct me!

  • »
    »
    8 месяцев назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    If you skip first phase and try to arrange pairs directly like in second phase, expected number of operations per pair becomes 5 instead of 4, but that is okay as we don't do any operations to guarantee pairs symmetry and there are n / 2 pairs.

»
8 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Another solution for E: If the prefix till L, excluded, is correct and the suffix till R=n-L+1, excluded, is correct, if we try to place L in the correct place, we can't ruin the prefix and the suffix. Let's calculate the expected number of operations in this case. T=1+0.5*0+0.5*T; T=2 (We do at least 1 operation, and if it's the wrong one, we're still expected to do T operations until the right one).

If we placed L, when we try to place R, we also can't ruin the prefix and the suffix, but we can move L to an incorrect place again. The expected number of operations in this case(if we want to not move L): T=1+0.5*0+0.5*0.5*(T+1)+0.5*0.5*(T+1); T=1+0.5(T+1); 0.5T=1.5; T=3 (We do at least 1 operation, and if it's the wrong one, after that we do either the wrong one again, cancelling it and using 1 operation, and again are expected do to another T operations, or the right one, using 1 operation, and again are expected to do another T operations, but in this case because we need to cancel the wrong one and not cancel the right one).

So for all L in total the expected number of operations is n/2*2=n, and for all R in total the expected number of operations is n/2*3=1.5n, n+1.5n=2.5n.

»
8 месяцев назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Sorry if this is a naive question, but regarding E, we assumed a fair probability of 0.5 for each flip. However, in practice, even after 4 or many more operations, it is possible that we still do not get the correct result. Of course, this will not happen for every n/2 pairs, but since the system tests a large number of participants and submissions, is it possible that some cases exceed the expected behavior?

For example, when tossing a fair coin, there is still a very small chance of getting tails 100 times in a row. I wonder how does the judge ensure that such extreme cases do not cause failures?

»
8 месяцев назад, скрыть # |
Rev. 2  
Проголосовать: нравится +10 Проголосовать: не нравится

I'm quite late, but in case it ends up being useful to anyone later: I had another $$$O(n \sqrt{n \log n})$$$ solution to F that sidesteps the precomputation in the editorial. The idea is to split the lengths into three blocks such that the first block consists of all lengths up to some $$$k_1$$$ and the second consists of all lengths between $$$k_1$$$ and some $$$k_2$$$. Then, proceed as follows:

  1. For the smallest lengths, we binary search for the last starting point for which the segment of the given length has weight at least $$$x$$$. This lets us count segments of each length in $$$O(\log n)$$$, so the complexity of this step is $$$O(k_1 \log n).$$$

  2. For the middle lengths, we repeatedly check if an interval of the current length has weight at least $$$x$$$ and add it to our answer if so. Each interval has length at least $$$k_1$$$, so there are at most $$$\frac{n}{k_1}$$$ of them. Additionally, since we check each length individually, we take $$$O(k_2)$$$ time just iterating through all the lengths. Thus, the complexity of this step is $$$O((n / k_1) + k_2).$$$

  3. Once the length is larger than $$$k_2$$$, we repeatedly binary search for the length of the next segment, as in the model solution. Since there are at most $$$n / k_2$$$ segments in this stage, the complexity of this step is $$$O((n \ k_2) \log n)$$$ (similar to the model solution).

Now, take $$$k_1 = \sqrt{n / \log n}$$$ and $$$k_2 = \sqrt{n \log n}.$$$ Then all three steps run in $$$O(n \sqrt{n \log n})$$$, as desired. My code passes in 1.5s by using $$$k_1 = 90$$$ and $$$k_2 = 1700.$$$

This solution differs from the model solution by removing the model's precomputation but adding the second step to process the larger lengths in the small group. Intuitively, we relatively quickly reach a point where the $$$n / x$$$ cost of iterating over many intervals of length $$$x$$$ is small enough that we'd rather pay it if needed than spend an extra $$$\log n$$$ factor doing binary search.

Thanks for the round!

»
8 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can someone explain in solution D why are we adding c to bst

»
5 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Here's my understanding of the solution for Problem D.

1) We won't add where a bit is already 0. Carry is generated only when 1 interacts with 1, i.e. when $$$bit[l]=1$$$ and $$$2^l$$$ is added. Making a bit 0 to 1 wastes a move. We could have used that move to get a carry by adding at any other bit position that has 1.

2) We won't add the same $$$2^l$$$ twice. Because after one move $$$bit[l]=1$$$ to $$$bit[l]=0$$$ . And we don't add under 0, as mentioned in the point above.

3) After every move, the number of 1's either remain same or decrease. On each move, several 1's get converted to 0 and one 0 gets converted to 1. This is essential to understand popcount(n) + moves - carries = popcount(n')

4) After some moves when it reaches form $$$2^x$$$, meaning there's only one bit position has 1, remaining moves add one to the score for every move because every time we'll targets the only set bit present.

5) Since $$$n \lt 2^{30}$$$, 30 moves are enough to make the number reach form $$$2^x$$$. We can see this if we always add $$$2^l$$$ where l is the lowest set bit of the number.

6) For DP, we will ask a $$$bit[0...i]$$$ what's the max score without a carry out, and what's the max score with a carry out. Carry out can interact with next higher bit and might generate greater score.

Here's my submission

If you find anything wrong, or have any other perspective, I would love to discuss.

»
4 месяца назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

For F, you actually don't have to precompute anything apart from prefix sums. It's sufficient to do brute force with the same length idea as the editorial, but simply binary search for how many subarrays of the current length you can take, before the sum becomes too small. And you also have to binary search for the next length we take, if our current length is too small.

Then the code can be very short: https://codeforces.me/contest/2173/submission/374665396