Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.59 KB | None | 0 0
  1. import java.util.Scanner;
  2. public class Main {
  3.    
  4.     static int generuj(int xi) {
  5.         return ((xi * 25173) + 13849) % 65536;
  6.     }
  7.    
  8.     public static class Hrac {
  9.         int skill, ktory;      
  10.        
  11.         public Hrac(int skill, int ktory){
  12.             this.skill = skill;
  13.             this.ktory = ktory;
  14.         }
  15.                
  16.     }
  17.    
  18.     public static void Zmen(int MM, int M, Hrac[] pole){
  19.         for (int j = 0; j < MM/2; j++) {
  20.             for (int k = M-1; k < (2*M)-2; k=k+2){                     
  21.                 if (pole[k].skill >= pole[k+1].skill) {                
  22.                     pole[k/2] = new Hrac(pole[k].skill,pole[k].ktory);
  23.                 } else {
  24.                     pole[k/2] = new Hrac(pole[k+1].skill,pole[k+1].ktory);
  25.                 }        
  26.             }
  27.             M = M / 2;         
  28.         }
  29.     }
  30.    
  31.     public static void main(String[] args) {
  32.         Scanner input = new Scanner( System.in );
  33.         int N = input.nextInt();
  34.         int M = (int)Math.pow(2,N);
  35.         int MM = M;
  36.         int s0 = input.nextInt();
  37.         Hrac[] pole = new Hrac[(2*M)-1];              
  38.         for (int i = 0; i < M; i++){                       
  39.             int s = generuj(s0);
  40.             s0 = s;
  41.             pole[M-1+i] = new Hrac(s, i+1);
  42.         }
  43.         Zmen(MM,M,pole);
  44.         System.out.println(pole[0].ktory+" "+pole[0].skill);
  45.        
  46.         int pocet_zmien = input.nextInt();
  47.        
  48.         for (int i = 0; i < pocet_zmien; i++){
  49.             int zmena_kto = input.nextInt();
  50.             int zmena_skill = input.nextInt();
  51.             M = MM;
  52.             pole[M-1+zmena_kto-1].skill = pole[M-1+zmena_kto-1].skill + zmena_skill;
  53.            
  54.             int k = M-1+zmena_kto-1;
  55.             int wins = 0;
  56.             for (int j = 0; j < MM/2; j++) {           
  57.                 if ((k % 2) == 1) {            
  58.                     if (pole[k].skill >= pole[M-1+zmena_kto].skill){
  59.                         pole[k / 2].skill = pole[k].skill;
  60.                         pole[k / 2].ktory = pole[k].ktory;
  61.                         wins++;
  62.                     } else {
  63.                         if (zmena_skill < 0) {
  64.                             Zmen(MM,MM,pole);
  65.                         }
  66.                        
  67.                         j = 2*MM;
  68.                     }
  69.                 } else {  
  70.                     if (pole[k].skill > pole[M-1+zmena_kto-2].skill){
  71.                         pole[(k-1) / 2].skill = pole[k].skill;
  72.                         pole[(k-1) / 2].ktory = pole[k].ktory;
  73.                         wins++;
  74.                     } else {
  75.                         if (zmena_skill < 0) {
  76.                             Zmen(MM,MM,pole);
  77.                         }
  78.                         j = 2*MM;
  79.                     }
  80.                 }
  81.                 k = k / 2;
  82.                 M = M / 2;         
  83.             }
  84.             System.out.println(wins);          
  85.         }              
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement