| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | 
							- package main
 
- import (
 
- 	"bufio"
 
- 	"fmt"
 
- 	"os"
 
- 	"strconv"
 
- 	"strings"
 
- )
 
- func mousetrap(scanner *bufio.Scanner) [][]int {
 
- 	caseCnt := ReadInt(scanner)
 
- 	answer := make([][]int, caseCnt)
 
- 	for i := 0; i < caseCnt; i++ {
 
- 		cardCnt := ReadInt(scanner)
 
- 		deck := make([]int, cardCnt)
 
- 		st := NewSegmentTree(cardCnt)
 
- 		for i, slot := 0, 0; st[1] != 0; i++ {
 
- 			slot = st.Search(slot, i+1)
 
- 			st.Update(slot, 0)
 
- 			deck[slot] = i + 1
 
- 		}
 
- 		pos := ReadInts(scanner)
 
- 		answer[i] = make([]int, len(pos)-1)
 
- 		for j := 1; j < len(pos); j++ {
 
- 			answer[i][j-1] = deck[pos[j]-1]
 
- 		}
 
- 	}
 
- 	return answer
 
- }
 
- func main() {
 
- 	inputFiles := []string{"C-small-practice.in", "C-large-practice.in", "test.in"}
 
- 	outputFiles := []string{"result-small.out", "result-large.out", "test.out"}
 
- 	const (
 
- 		small = iota
 
- 		large
 
- 		test
 
- 	)
 
- 	fileType := test
 
- 	fin, _ := os.Open(inputFiles[fileType])
 
- 	defer fin.Close()
 
- 	scanner := bufio.NewScanner(fin)
 
- 	answer := mousetrap(scanner)
 
- 	fout, _ := os.Create(outputFiles[fileType])
 
- 	defer fout.Close()
 
- 	for i := range answer {
 
- 		var ans strings.Builder
 
- 		for _, n := range answer[i] {
 
- 			ans.WriteString(" " + strconv.Itoa(n))
 
- 		}
 
- 		s := fmt.Sprintf("Case #%d:%s\n", i+1, ans.String())
 
- 		fout.WriteString(s)
 
- 	}
 
- }
 
 
  |