Code : Final Array State After K Multiplication Operations II
Code : Final Array State After K Multiplication Operations II
constintmod=(int)1e9+7;#define order first
#define idx second
classSolution{public:vector<int>getFinalState(vector<int>&nums,intk,intmultiplier);};intpower(intbase,intexp){if(exp==0){return1;}inthalf=power(base,exp/2);longlongres=(1LL*half*half);res%=mod;if(exp%2!=0){res*=base;res%=mod;}returnres;}vector<int>Solution::getFinalState(vector<int>&a,intk,intm){intn=a.size();if(m==1){returna;}vector<int>op_cnt(n,0);// set stores {order, i}
set<pair<longlong,int>>st;for(inti=0;i<n;i++){st.insert({a[i],i});}longlongleft=(*st.begin()).order;longlongright=(*st.rbegin()).order;while(k&&left*m<=right){autonow=*st.begin();st.erase(st.begin());now.order*=m;op_cnt[now.idx]++;k--;st.insert(now);left=(*st.begin()).order;right=(*st.rbegin()).order;}intq=k/n;intremain=k%n;for(inti=0;i<remain;i++){autonow=*st.begin();st.erase(st.begin());now.order*=m;st.insert(now);op_cnt[now.idx]++;}for(inti=0;i<n;i++){op_cnt[i]+=q;a[i]=(1LL*a[i]*power(m,op_cnt[i]))%mod;}returna;}