reward.go 673 B

123456789101112131415161718192021222324252627282930313233343536
  1. package main
  2. import "fmt"
  3. func main() {
  4. var N int
  5. fmt.Scan(&N)
  6. for cid := 0; cid < N; cid++ {
  7. var n int
  8. fmt.Scan(&n)
  9. a := make([]int, n)
  10. for i := range a {
  11. fmt.Scan(&a[i])
  12. }
  13. reward := make([]int, n)
  14. for i, idx := 0, 0; i < n+2; i++ {
  15. pre := (idx + n - 1) % n
  16. if a[pre] < a[idx] && reward[idx] <= reward[pre] {
  17. reward[idx] = reward[pre] + 1
  18. }
  19. idx = (idx + 1) % n
  20. }
  21. for i, idx := 0, 0; i < n+2; i++ {
  22. nxt := (idx + 1) % n
  23. if a[nxt] < a[idx] && reward[idx] <= reward[nxt] {
  24. reward[idx] = reward[nxt] + 1
  25. }
  26. idx = (idx + n - 1) % n
  27. }
  28. sum := 0
  29. for _, r := range reward {
  30. sum += r
  31. }
  32. fmt.Println(sum + n)
  33. }
  34. }