import java.util.*; public class Main { static class Pair { int x; int time; Pair(int x, int time) { this.x = x; this.time = time; } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); List<Pair> t2Ops = new ArrayList<>(); int[] t1 = new int[n + 1]; Arrays.fill(t1, Integer.MAX_VALUE); int opTime = 1; for (int i = 0; i < m; i++) { int t = sc.nextInt(); int x = sc.nextInt(); if (t == 1) { if (t1[x] == Integer.MAX_VALUE) { t1[x] = opTime; } } else { t2Ops.add(new Pair(x, opTime)); } opTime++; } if (t2Ops.isEmpty()) { int maxTime = -1; for (int i = 1; i <= n; i++) { if (t1[i] == Integer.MAX_VALUE) { System.out.println(-1); return; } maxTime = Math.max(maxTime, t1[i]); } System.out.println(maxTime); return; } Pair firstT2 = t2Ops.get(0); int x0 = firstT2.x; int timeFirstT2 = firstT2.time; int timeX0 = Integer.MAX_VALUE; for (int j = 1; j < t2Ops.size(); j++) { Pair p = t2Ops.get(j); if (p.x != x0) { timeX0 = p.time; break; } } int maxTime = -1; for (int i = 1; i <= n; i++) { int t2_i = (i != x0) ? timeFirstT2 : timeX0; int earliest = Math.min(t1[i], t2_i); if (earliest == Integer.MAX_VALUE) { System.out.println(-1); return; } maxTime = Math.max(maxTime, earliest); } System.out.println(maxTime); } }
https://www.nowcoder.com/discuss/727521113110073344
思路:
- 输入处理:读取输入数据,记录类型1操作和类型2操作的信息。
- 类型1操作处理:遍历类型1操作,记录每个盒子被覆盖的最早时间。
- 类型2操作处理:记录类型2操作的x值和时间,处理后续操作以确定每个盒子的覆盖时间。
- 特殊情况处理:如果没有类型2操作,直接检查所有盒子是否被类型1操作覆盖。
- 计算每个盒子的最早覆盖时间:结合类型1和类型2操作的时间,确定每个盒子的最早覆盖时间,并取最大值作为结果。