Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bufio"
- "fmt"
- "os"
- "sort"
- "strconv"
- "strings"
- //"github.com/pkg/profile"
- )
- type order struct {
- Arrival int
- Index int
- }
- type car struct {
- From int
- To int
- Cap int
- Index int
- }
- func main() {
- //defer profile.Start(profile.CPUProfile).Stop()
- in := bufio.NewReader(os.Stdin)
- out := bufio.NewWriter(os.Stdout)
- defer out.Flush()
- var t int
- fmt.Fscan(in, &t)
- for l := 0; l < t; l++ {
- var n int
- fmt.Fscan(in, &n)
- orders := make([]order, n)
- for i := 0; i < n; i++ {
- o := order{Index: i}
- fmt.Fscan(in, &o.Arrival)
- orders[i] = o
- }
- sort.SliceStable(orders, func(i, j int) bool { return orders[i].Arrival < orders[j].Arrival })
- var m int
- fmt.Fscan(in, &m)
- cars := make([]car, m)
- for i := 0; i < m; i++ {
- c := car{Index: i}
- fmt.Fscan(in, &c.From, &c.To, &c.Cap)
- cars[i] = c
- }
- sort.SliceStable(cars, func(i, j int) bool {
- if cars[i].From == cars[j].From {
- return cars[i].To < cars[j].To
- }
- return cars[i].From < cars[j].From
- })
- orderCars := make([]string, n)
- var k int
- for i := range orders {
- orderCars[orders[i].Index] = "-1"
- for j := k; j < m; j++ {
- if orders[i].Arrival >= cars[j].From && orders[i].Arrival <= cars[j].To && cars[j].Cap > 0 {
- orderCars[orders[i].Index] = strconv.Itoa(cars[j].Index + 1)
- cars[j].Cap--
- k = j
- break
- }
- }
- }
- out.WriteString(strings.Join(orderCars, " "))
- out.WriteString("\n")
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement