Editorial for WC '18 Contest 1 S4 - Bad Influence
Submitting an official solution before solving the problem yourself is a bannable offence.
Let  be the volatility of students 
. The volatility of a set of students is simply the number of students 
 who cannot be coerced into using their phones by anybody else (in other words, the number of students 
 for which there exists no student 
 such 
 and 
). We can thus think of each student as contributing either 
 or 
 volatility to each 
 value. Let 
 be the smallest value of 
 which satisfies the above conditions (or 
 if there's no such 
). If 
, then student 
 contributes no volatility at all, and otherwise, they contribute 
 volatility to each of the values 
. So, if we had the values 
, we could use them to compute the volatilities 
 with a simple 
 sweep.
What remains is computing the values  efficiently. Let's process the 
 students in decreasing order of 
 value, either by explicitly sorting them by their 
 values, or by keying them by their 
 values and then iterating over all possible 
 values from 
 down to 
. Let 
 be the minimum index (in the original ordered student list) of any student processed so far whose range of influence includes desk 
 (or 
 if there's been no such student so far). When processing student 
, we can observe that 
 must be equal to 
. And upon finishing with student 
, we should update 
 to 
 for each desk 
 in the inclusive interval 
.
Let's maintain the values  (where 
 is the maximum possible 
 value) using a segment tree with lazy propagation, in which each node stores the minimum value of any 
 value in its interval, as well as the minimum new value which all 
 values in its interval should lazily be updated with. This allows us to both query an 
 value and update a range of 
 values as necessary in 
 time each, resulting in an overall time complexity of 
 (where 
 is the maximum possible 
 value and 
 is the maximum possible 
 value).
Comments