Untitled
unknown
plain_text
2 years ago
3.4 kB
5
Indexable
class Node{
int id, team, score;
public Node() {
}
public Node(int id, int team, int score) {
this.id = id;
this.team = team;
this.score = score;
}
Node next, prev;
}
class DoubleLinkedList{
Node head, tail;
public DoubleLinkedList(){
head = new Node();
tail = new Node();
link(head, tail);
}
public void link(Node lf, Node rt) {
lf.next = rt;
rt.prev = lf;
}
public void insert(Node node) {
if (head.next != tail) {
link(node, head.next);
link(head, node);
} else {
link(node, tail);
link(head, node);
}
}
}
class UserSolution
{
Node soilder[];
DoubleLinkedList[][] linkedlist;
public void init()
{
soilder = new Node[100005];
linkedlist = new DoubleLinkedList[6][6];
for (int i=0;i<=5;i++) {
for (int j=0;j<=5;j++) {
linkedlist[i][j] = new DoubleLinkedList();
}
}
}
public void hire(int mID, int mTeam, int mScore)
{
soilder[mID] = new Node(mID, mTeam, mScore);
linkedlist[mTeam][mScore].insert(soilder[mID]);
}
public void fire(int mID)
{
soilder[mID].team = -1;
}
public void updateSoldier(int mID, int mScore)
{
Node tsoilder = soilder[mID];
int team = tsoilder.team;
tsoilder.team = -1;
hire(mID, team, mScore);
}
public void updateTeam(int mTeam, int mChangeScore)
{
if (mChangeScore > 0) {
for (int i=4;i>=1;i--) {
int nscore = i + mChangeScore;
if(nscore > 5) {
nscore = 5;
}
update(mTeam, i , nscore);
}
} else if (mChangeScore < 0){
for (int i=2;i<=5;i++) {
int nscore = i + mChangeScore;
if (nscore < 1) {
nscore = 1;
}
update(mTeam, i , nscore);
}
}
}
private void update(int mTeam, int score, int nScore) {
if (linkedlist[mTeam][score].head.next != linkedlist[mTeam][score].tail) {
linkedlist[mTeam][score].head.next.prev = linkedlist[mTeam][nScore].tail.prev;
linkedlist[mTeam][nScore].tail.prev.next = linkedlist[mTeam][score].head.next;
linkedlist[mTeam][nScore].tail = linkedlist[mTeam][score].tail;
linkedlist[mTeam][score] = new DoubleLinkedList();
}
}
public int bestSoldier(int mTeam)
{
int bestId = -1;
for(int i=5;i>=1;i--) {
Node curNode = linkedlist[mTeam][i].head;
while(curNode != null) {
if (mTeam == curNode.team && bestId < curNode.id) {
bestId = curNode.id;
}
curNode = curNode.next;
}
if (bestId != -1) {
// System.out.println("BEST ID--> "+bestId);
return bestId;
}
}
return 1;
}
}Editor is loading...
Leave a Comment