anasretdinov

Dodelat'

May 2nd, 2020
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.util.*;
  2.  
  3. public class Main {
  4.     static class Heap {
  5.         ArrayList<Pair> items;
  6.         int [] a;
  7.         public Heap(int n) {
  8.             items = new ArrayList<Pair> ();
  9.             a = new int [n+1];
  10.         }
  11.  
  12.         //using shiftUp for insert.
  13.         private void shiftUp () {
  14.             int k = items.size() - 1;
  15.             while (k > 0){
  16.                 int curr = (k-1)/2;
  17.                 Pair Item = items.get(k);
  18.                 Pair Parent = items.get(curr);
  19.                 if (Item.compareTo(Parent) < 0){
  20.                     items.set(k, Parent);
  21.                     a[Item.second] = curr;
  22.                     items.set(curr, Item);
  23.                     a[Parent.second] = k;
  24.                     k = curr;
  25.                 }
  26.                 else break;
  27.             }
  28.         }
  29.         private int shiftUp (int index) {
  30.             while (index > 0) {
  31.                 int curr = (index - 1) / 2;
  32.                 Pair Item = items.get(index);
  33.                 Pair Parent = items.get(curr);
  34.                 if (Item.compareTo(Parent) < 0) {
  35.                     items.set(index, Parent);
  36.                     a[Parent.second] = index;
  37.                     a[Item.second] = curr;
  38.                     items.set(curr, Item);
  39.                     index = curr;
  40.                 } else {
  41.                     return index;
  42.                 }
  43.  
  44.             }
  45.             return index;
  46.         }
  47.         //using shiftDown fo delete
  48.         private void shiftDown() {
  49.             int curr = 0;
  50.             int leftChild = 2*curr+1;
  51.             while (leftChild < items.size()) {
  52.                 int max = leftChild;
  53.                 int rightChild = leftChild + 1;
  54.                 if (rightChild < items.size()) {
  55.                     if (items.get(rightChild).compareTo(items.get(leftChild)) < 0) {
  56.                         ++max;
  57.                     }
  58.                 }
  59.                 if (items.get(curr).compareTo(items.get(max)) > 0) {
  60.                     Pair tmp = items.get(curr);
  61.                     items.set(curr, items.get(max));
  62.                     a[items.get(max).second] = curr;
  63.                     items.set(max, tmp);
  64.                     a[tmp.second] = max;
  65.                     curr = max;
  66.                     leftChild = 2*curr+1;
  67.                 }
  68.                 else break;
  69.             }
  70.         }
  71.  
  72.         public void insert(Pair item) {
  73.             items.add(item);
  74.             a[item.second] = items.size()-1;
  75.             shiftUp();
  76.         }
  77.         private int shiftDown(int curr) {
  78.             int leftChild = 2*curr+1;
  79.             while (leftChild < items.size()) {
  80.                 int max = leftChild;
  81.                 int rightChild = leftChild + 1;
  82.                 if (rightChild < items.size()) {
  83.                     if (items.get(rightChild).compareTo(items.get(leftChild)) > 0) {
  84.                         ++max;
  85.                     }
  86.                 }
  87.                 if (items.get(curr).compareTo(items.get(max)) < 0) {
  88.                     Pair tmp = items.get(curr);
  89.                     items.set(curr, items.get(max));
  90.                     items.set(max, tmp);
  91.                     a[items.get(max).second] = curr;
  92.                     a[tmp.second] = max;
  93.                     curr = max;
  94.                     leftChild = 2*curr+1;
  95.                 }
  96.                 else break;
  97.             }
  98.             return curr;
  99.         }
  100.         public Pair set(int y, int k){
  101.             int number = a[y];
  102.             Pair dt = items.get(number);
  103.             if (dt.first )
  104.         }
  105.         public Pair deleteIndex(int index){
  106.             Pair x = items.get(index);
  107.             if (items.get(index).compareTo(items.get(items.size()-1)) < 0) {
  108.                 items.set(index, items.remove(items.size() - 1));
  109.                 int nowd = shiftDown(index);
  110.                 shiftUp(nowd);
  111.                 return x;
  112.             }
  113.             else
  114.             {
  115.                 items.set(index, items.remove(items.size() - 1));
  116.                 int nowd = shiftUp(index);
  117.                 shiftDown(nowd);
  118.                 return x;
  119.             }
  120.         }
  121.         public Pair remove() throws NoSuchElementException {
  122.             if (items.size() == 0) {
  123.                 throw new NoSuchElementException();
  124.             }
  125.             if (items.size() == 1) return items.remove(0);
  126.             Pair x = items.get(0);
  127.             items.set(0, items.remove(items.size()-1));
  128.             a[items.remove(items.size()-1).second] = 0;
  129.             shiftDown();
  130.             return x;
  131.         }
  132.  
  133.         public int size() {
  134.             return items.size();
  135.         }
  136.  
  137.         public boolean isEmpty() {
  138.             return items.isEmpty();
  139.         }
  140.  
  141.         public String toString() {
  142.             return items.toString();
  143.         }
  144.  
  145.         public Pair min() {
  146.             return items.get(0);
  147.         }
  148.         public void print() {
  149.             for (int i = 0; i < items.size(); i++) {
  150.                 System.out.println(items.get(i).toString() + " ");
  151.             }
  152.             System.out.println();
  153.         }
  154.     }
  155.  
  156.     static Scanner s = new Scanner(System.in);
  157.     static int len(int k){
  158.         int c = 0;
  159.         while (k > 0){
  160.             c++;
  161.             k /= 10;
  162.         }
  163.         return c;
  164.     }
  165.     static int gcd(int a, int b){
  166.         if (a > b) {
  167.             int t = a + b;
  168.             a = t - a;
  169.             b = t - b;
  170.         }
  171.         if (a == 0) return b;
  172.         if (a == 1) return 1;
  173.         return gcd(a, b % a);
  174.     }
  175.     static int k = 0;
  176.     public static void main(String[] args) {
  177.         Scanner s = new Scanner(System.in);
  178.         int tc = s.nextInt();
  179.         for (int bgb = 0; bgb < tc; bgb++) {
  180.             int n = s.nextInt();
  181.             int [] a = new int [n+1];
  182.             for (int i = 0; i < n; i++) {
  183.                 a[i+1] = s.nextInt();
  184.             }
  185.             int [] pref = prefsumma(a);
  186.             int [] v = new int [n+1];
  187.             for (int i = n-1; i > -1; i--) {
  188.                 v[i] = v[i+1] + a[i+1];
  189.             }
  190.             int last = n;
  191.             int sum = 0;
  192.             int [] to = new int [n+1];
  193.             int sumdamage = 0;
  194.             int min = Integer.MAX_VALUE;
  195.             PriorityQueue<Pair> heap = new PriorityQueue<>();
  196.             for (int i = 1; i <= n; i++) {
  197.                 sumdamage += a[i] * (i - 1);
  198.                 heap.add(new Pair(a[i] - v[i], i));
  199.             }
  200.             int [] is = new int [n+1];
  201.             int [] interest = new int [n+1];
  202.             for (int i = 1; i <= n; i++) {
  203.                 is[i] = 1;
  204.                 interest[i] = 1;
  205.             }
  206.             min = sumdamage;
  207.             for (int t = n-1; t > 0; t--) {
  208.                 Pair p = heap.remove();
  209.                 int x = p.second;
  210.                 int d = p.first;
  211.                 sumdamage += d;
  212.  
  213.             }
  214.         }
  215.     }
  216.     static class Pair implements Comparable<Pair>{
  217.         int first;
  218.         int second;
  219.  
  220.         public Pair(int first, int second) {
  221.             this.first = first;
  222.             this.second = second;
  223.         }
  224.  
  225.         @Override
  226.         public int compareTo(Pair pair) {
  227.             if (this.first == pair.first) return second - pair.second; else return this.first - pair.first;
  228.         }
  229.     }
  230.     static int [] prefsumma(int [] a){
  231.         int n = a.length;
  232.         int [] pref = new int [n];
  233.         for (int i = 1; i < n; i++) {
  234.             pref[i] = pref[i-1] + a[i];
  235.         }
  236.         return pref;
  237.     }
  238. }
Add Comment
Please, Sign In to add comment