import java.util.*;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

public class Solution {
    private LinkedHashMap<Integer,Integer> lMap = new LinkedHashMap<>();
    private int lruSize = 0;
    /**
     * lru design
     * @param operators int整型二维数组 the ops
     * @param k int整型 the k
     * @return int整型一维数组
     */
    public int[] LRU (int[][] operators, int k) {
        // write code here
        lruSize = k;
        List<Integer> result = new ArrayList<>();
        if(operators == null){
            return new int[]{};
        }
        for(int i = 0;i < operators.length;i++){
            int[] next = operators[i];
            if(next[0] == 1){
                set(next[1],next[2]);
            } else if(next[0] == 2){
                result.add(get(next[1]));
            }
        }
        int[] res = new int[result.size()];
        for(int i = 0;i<result.size();i++){
            res[i] = result.get(i);
        }
        return res;
    }

    public void set(Integer key,Integer value){
        //第一步 判断是否已经存在 存在就删除
        if(lMap.containsKey(key)){
            lMap.remove(key);
        }
        //第二步 判断是否将要超过大小 是就删除最旧的
        if(lMap.size() == lruSize){
            Iterator<Integer> it = lMap.keySet().iterator();
            lMap.remove(it.next());
        }
        lMap.put(key,value);
    }

    public int get(Integer key){
        if(lMap.containsKey(key)){
            //变成最近使用
            int value = lMap.get(key);
            lMap.remove(key);
            lMap.put(key,value);
            return value;
        }
        return -1;
    }
}