package main
import (
"container/list"
"fmt"
)
type Solution struct {
cap int
dict map[int] *list.Element
list *list.List
}
type Pair struct {
key, value int
}
func Construct(cap int) Solution{
return Solution{
cap,
make(map[int]*list.Element),
&list.List{},
}
}
func (this * Solution) Get(key int) int {
if this.dict[key] == nil {
return -1
}
this.list.MoveToFront(this.dict[key])
return this.dict[key].Value.(Pair).value
}
func (this * Solution) Set(key, value int) {
if this.dict[key] != nil {
this.dict[key].Value = Pair{key, value}
} else {
if this.cap > 0 {
if this.list.Len() == this.cap {
delete(this.dict, this.list.Back().Value.(Pair).key)
this.list.Remove(this.list.Back())
}
this.dict[key] = this.list.PushFront(Pair{key,value})
}
}
}
func main() {
var cap int
fmt.Scan(&cap)
LRU := Construct(cap)
for {
var op string
_, err := fmt.Scan(&op)
if err != nil {
break
}
if op == "p" {
var key,value int
fmt.Scan(&key, &value)
LRU.Set(key, value)
} else if op == "g"{
var key int
fmt.Scan(&key)
res := LRU.Get(key)
fmt.Println(res)
}
// tmp := LRU.list.Front()
// for tmp != nil {
// fmt.Println(tmp.Value.(Pair).key, tmp.Value.(Pair).value)
// tmp = tmp.Next()
// }
// fmt.Println("- - -")
}
}