Maxim and Array

Posted geraldg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maxim and Array相关的知识,希望对你有一定的参考价值。

Maxim and Array

Recently Maxim has found an array of n integers, needed by no one. He immediately come up with idea of changing it: he invented positive integer x and decided to add or subtract it from arbitrary array elements. Formally, by applying single operation Maxim chooses integer i (1 ≤ i ≤ n) and replaces the i-th element of array ai either with ai + x or with ai - x. Please note that the operation may be applied more than once to the same position.

Maxim is a curious minimalis, thus he wants to know what is the minimum value that the product of all array elements (i.e. 技术图片) can reach, if Maxim would apply no more than k operations to it. Please help him in that.

Input

The first line of the input contains three integers n, k and x (1 ≤ n, k ≤ 200 000, 1 ≤ x ≤ 109) — the number of elements in the array, the maximum number of operations and the number invented by Maxim, respectively.

The second line contains n integers a1, a2, ..., an (技术图片) — the elements of the array found by Maxim.

Output

Print n integers b1, b2, ..., bn in the only line — the array elements after applying no more than k operations to the array. In particular, 技术图片 should stay true for every 1 ≤ i ≤ n, but the product of all array elements should be minimum possible.

If there are multiple answers, print any of them.

Examples

Input
5 3 1
5 4 3 5 2
Output
5 4 3 5 -1 
Input
5 3 1
5 4 3 5 5
Output
5 4 0 5 5 
Input
5 3 1
5 4 4 5 5
Output
5 1 4 5 5 
Input
3 2 7
5 4 2
Output
5 11 -5 
题意:一个序列长为n,有k个x让你去给序列任意一个数加||减x,然后要求序列各项乘积最大,输出变化后的序列
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+9;
struct num 
    ll abs,val,idx;
    num(ll val,ll abs,ll idx):val(val),abs(abs),idx(idx) 
    bool operator < (const num& rhs)const 
        return abs>rhs.abs;
    
;
ll a[N],n,k,x,zero,neg;
int main() 
    //freopen("f.txt","r",stdin);
    priority_queue<num>q;
    scanf("%I64d%I64d%I64d",&n,&k,&x);
    zero=neg=0;
    for(int i=1; i<=n; i++) 
        scanf("%I64d",&a[i]);
        if(a[i]==0)zero++;
        if(a[i]<0)neg++;
        q.push(num(a[i],abs(a[i]),i));
    
    if(zero>k) 
        for(int i=1; i<=n; i++)printf("%I64d ",a[i]);
        return 0;
    

    if(neg%2==0) 
        if(zero) 
            neg++;
            zero--,k--;
            num t=q.top();
            q.pop();
            a[t.idx]-=x;
            t.val-=x;
            t.abs+=x;
            q.push(t);
        
    
    while(zero--) 
        k--;
        num t=q.top();
        q.pop();
        a[t.idx]+=x;
        t.val+=x;
        t.abs+=x;
        q.push(t);
    
    if(neg%2==0) 
        num t=q.top();
        q.pop();
        if(t.val<0) 
            while(t.val<=0&&k)t.val+=x,k--;

         else
            while(t.val>=0&&k)t.val-=x,k--;
        a[t.idx]=t.val;
        t.abs=abs(t.val);
        q.push(t);
    
    while(k--) 
        num t=q.top();
        q.pop();
        if(t.val<0)a[t.idx]-=x;
        else a[t.idx]+=x;
        t.abs+=x;
        q.push(t);
    
    for(int i=1; i<=n; i++)printf("%I64d ",a[i]);
    return 0;

 

以上是关于Maxim and Array的主要内容,如果未能解决你的问题,请参考以下文章

cf 261B.Maxim and Restaurant

CF261B Maxim and Restaurant

CodeForces - 261B Maxim and Restaurant

CodeForces - 261E Maxim and Calculator

CodeForces 721D Maxim and Array

CodeForces 721D Maxim and Array