CF1696G.Fishingprince Plays With Array Again

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Suppose you are given a 1-indexed sequence aa of non-negative integers, whose length is nn , and two integers xx , yy . In consecutive tt seconds ( tt can be any positive real number), you can do one of the following operations:

  • Select 1i<n1\le i<n , decrease aia_i by xtx\cdot t , and decrease ai+1a_{i+1} by yty\cdot t .
  • Select 1i<n1\le i<n , decrease aia_i by yty\cdot t , and decrease ai+1a_{i+1} by xtx\cdot t .

Define the minimum amount of time (it might be a real number) required to make all elements in the sequence less than or equal to 00 as f(a)f(a) .

For example, when x=1x=1 , y=2y=2 , it takes 33 seconds to deal with the array [3,1,1,3][3,1,1,3] . We can:

  • In the first 1.51.5 seconds do the second operation with i=1i=1 .
  • In the next 1.51.5 seconds do the first operation with i=3i=3 .

We can prove that it's not possible to make all elements less than or equal to 00 in less than 33 seconds, so f([3,1,1,3])=3f([3,1,1,3])=3 .

Now you are given a 1-indexed sequence bb of positive integers, whose length is nn . You are also given positive integers xx , yy . Process qq queries of the following two types:

  • 1 k v: change bkb_k to vv .
  • 2 l r: print f([bl,bl+1,,br])f([b_l,b_{l+1},\dots,b_r]) .

输入格式

The first line of input contains two integers nn and qq ( 2n21052\le n\le 2\cdot 10^5 , 1q21051\le q\le 2\cdot 10^5 ).

The second line of input contains two integers xx and yy ( 1x,y1061\le x,y\le 10^6 ).

The third line of input contains nn integers b1,b2,,bnb_1,b_2,\ldots,b_n ( 1bi1061\le b_i\le 10^6 ).

This is followed by qq lines. Each of these qq lines contains three integers. The first integer opop is either 11 or 22 .

  • If it is 11 , it is followed by two integers kk , vv ( 1kn1\le k\le n , 1v1061\le v\le 10^6 ). It means that you should change bkb_k to vv .
  • If it is 22 , it is followed by two integers ll , rr ( 1l<rn1\le l<r\le n ). It means that you should print f([bl,bl+1,,br])f([b_l,b_{l+1},\dots,b_r]) .

输出格式

For each query of type 22 , print one real number — the answer to the query. Your answer is considered correct if its absolute error or relative error does not exceed 10910^{-9} .

输入输出样例

  • 输入#1

    4 3
    1 2
    3 1 1 4
    2 1 4
    1 1 1
    2 1 3

    输出#1

    3.500000000000000
    1.000000000000000

说明/提示

Let's analyse the sample.

In the first query, we are asked to compute f([3,1,1,4])f([3,1,1,4]) . The answer is 3.53.5 . One optimal sequence of operations is:

  • In the first 1.51.5 seconds do the second operation with i=1i=1 .
  • In the next 22 seconds do the first operation with i=3i=3 .

In the third query, we are asked to compute f([1,1,1])f([1,1,1]) . The answer is 11 . One optimal sequence of operations is:

  • In the first 0.50.5 seconds do the second operation with i=1i=1 .
  • In the next 0.50.5 seconds do the first operation with i=2i=2 .
首页