Jak przełożyć C++ na Java

0

Witam.

Chciałbym przełożyć jeden z programów z C++ na Javę. Napotkałem pewną trudność która zapewne jest oczywista, ale jestem mało doświadczony.... :(

Program jest jedną z implementacji rozwiązania zadania "Litery" z XIX olimpiady informatycznej:

https://oi.edu.pl/l/19oi_ksiazeczka/

Oto kod interesującej mnie implementacji:


#include <cstdio>
#include <vector>
using namespace std;
 
/* Implementacja drzew przedzialowych wg strony:
 * http://was.zaa.mimuw.edu.pl/?q=node/9
 */
#define SIZE 20
int w[1 << (SIZE+1)];
 
void insert(int x, int val) {
   int v = (1 << SIZE) + x;
   w[v] = val;
   while (v != 1){
     v /= 2;
     w[v] = w[2 * v] + w[2 * v + 1];
   }
}
 
int query(int a, int b){
   int va = (1 << SIZE) + a;
   int vb = (1 << SIZE) + b;
    
   int wyn = w[va];
   if (va != vb) 
     wyn += w[vb];
 
   while (va / 2 != vb / 2) {
     if (va % 2 == 0) wyn += w[va + 1]; 
     if (vb % 2 == 1) wyn += w[vb - 1]; 
     va /= 2; vb /= 2;
   }
   return wyn;
}
 
#define MAXN 1000005
long long wynik;
int n, pos, temp;
vector<int> tab[255];
char s[MAXN];
 
int main(){
  temp = scanf("%d", &n);
  temp = scanf("%s", s);
  for (int i = n - 1; i >= 0; --i)
    tab[int(s[i])].push_back(i);
  temp = scanf("%s", s);
 
  for (int i = 0; i < n; ++i){
    pos = tab[int(s[i])].back();
    tab[int(s[i])].pop_back();
    insert(pos, 1);
    pos += query(pos+1, MAXN);
    wynik += pos - i;
  }
 
  temp = printf("%lld\n", wynik);
 
  return 0;
}

Tym czego nie rozumiem jest zapis znajdujący się w operacjach na vektorze. M.in:


tab[int(s[i])].push_back(i);
//oraz
pos = tab[int(s[i])].back();
//oraz
tab[int(s[i])].pop_back();

Nie mogę rozgryźć jak można takowy zapis przełożyć na Javę, nie chodzi mi o push_back, back czy pop_back, to rozwiązałem, lecz nie wiem jak przełożyć znajdujący się przed nimi zapis:


tab[int(s[i])]

Próbowałem Vector Javovy, ArrayList... lecz utknąłem.

Z góry dziękuję za pomoc :)

0

Tak, jest, to rozumiem :). Bardziej chodzi mi o to po co tu używa sie tu tego rzutowania i jak to zrobic w javie by działało tak jak w tej implementacji. Używając w javie arraya/vectora nie moge tak odniesc sie do pozycji w liscie :S i jak do tego dorzucic dzialanie np popback

0

Chyba szukasz tego:

ArrayList<> tab = new ArrayList<ArrayList<Integer>>();
tab.add(new ArrayList<>());
tab.get(0).add(3);

1 użytkowników online, w tym zalogowanych: 0, gości: 1