Untitled
unknown
plain_text
2 years ago
1.3 kB
4
Indexable
public class Solution { int modulo = 1000000007; public int solve(ArrayList<Integer> A) { int n = A.size(); Collections.sort(A); long power = n-1; long base = 2; long minpower = 1; long maxPower = 1; // Fast power while(power > 0) { if(power % 2 != 0) { maxPower = (maxPower * base) % modulo; } base = (base * base) % modulo ; power = power / 2; } // 306568771 long ans = 0; for(int i = 0 ; i < n ; i++) { long sub = (minpower - maxPower + modulo) % modulo ; long curr_ans = (A.get(i) * sub) % modulo; ans = (ans + curr_ans) % modulo; minpower = (minpower * 2) % modulo; maxPower = (maxPower*fastPow(2, modulo-2))%modulo; // This line is updated in your code } return (int)ans % modulo; } //Added this method to compute fastPow public int fastPow(int a, int n){ if(n==0){ return 1; } if(n==1){ return a; } long ans = fastPow(a, n/2); ans = (ans*ans)%modulo; if(n%2 == 1){ ans = (ans*a)%modulo; } return (int)ans; } }
Editor is loading...