Submission #74943497
Source Code Expand
import java.util.*;
import java.io.*;
public class Main {
static final int OFFSET = 50000;
static final int SIZE = 100001;
static int[] psum = new int[SIZE + 2];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[] D = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) D[i] = Integer.parseInt(st.nextToken());
if (M > 0) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++) {
int x = Integer.parseInt(st.nextToken()) + OFFSET;
if (x >= 0 && x < SIZE) psum[x + 1]++;
}
}
for (int i = 0; i <= SIZE; i++) psum[i + 1] += psum[i];
// Represent reachable as sorted list of disjoint intervals [lo, hi]
// For each step d:
// canExec within interval [lo,hi]:
// if d>0: subinterval of p where no barr in [p, p+d]
// = p where nextBarrRight[p] > p+d
// blocked if nextBarrRight[p] <= p+d
// Find first barricade b >= lo: if b <= hi+d, then p in [b-d, hi] blocked
// Actually: split interval at each barricade within [lo, hi+d]
// Simpler: for interval [lo,hi], find all barricades in [lo, hi+d]
// Each barricade b blocks p in [b-d, b] (clipped to [lo,hi])
// The canExec sub-intervals are the gaps between blocked regions
// next intervals = original intervals (skip) union shifted canExec intervals (execute)
// Then merge overlapping intervals
// Store intervals as int[2] sorted by lo
List<int[]> intervals = new ArrayList<>();
intervals.add(new int[]{OFFSET, OFFSET});
// barricade sorted list
TreeSet<Integer> barrSet = new TreeSet<>();
for (int i = 0; i < SIZE; i++) {
if (psum[i + 1] > psum[i]) barrSet.add(i);
}
for (int step = 0; step < N; step++) {
int d = D[step];
List<int[]> execIntervals = new ArrayList<>();
for (int[] seg : intervals) {
int lo = seg[0], hi = seg[1];
// positions p in [lo,hi] that can execute d
// d>0: need no barr in [p, p+d], p+d < SIZE
// d<0: need no barr in [p+d, p], p+d >= 0
int pLo = lo, pHi = hi;
if (d > 0) pHi = Math.min(pHi, SIZE - 1 - d);
else pLo = Math.max(pLo, -d);
if (pLo > pHi) continue;
// Find barricades that block some p in [pLo, pHi]
// d>0: barr b in [pLo, pHi+d] blocks p in [b-d, b] ∩ [pLo,pHi]
// d<0: barr b in [pLo+d, pHi] blocks p in [b, b-d] ∩ [pLo,pHi]
int scanLo = d > 0 ? pLo : pLo + d;
int scanHi = d > 0 ? pHi + d : pHi;
NavigableSet<Integer> barrs = barrSet.subSet(scanLo, true, scanHi, true);
int cur = pLo;
for (int b : barrs) {
// blocked p range
int bpLo = d > 0 ? b - d : b;
int bpHi = d > 0 ? b : b - d;
bpLo = Math.max(bpLo, pLo);
bpHi = Math.min(bpHi, pHi);
if (cur < bpLo) {
execIntervals.add(new int[]{cur + d, bpLo - 1 + d});
}
cur = Math.max(cur, bpHi + 1);
}
if (cur <= pHi) {
execIntervals.add(new int[]{cur + d, pHi + d});
}
}
// merge intervals ∪ execIntervals
List<int[]> combined = new ArrayList<>(intervals);
combined.addAll(execIntervals);
combined.sort(Comparator.comparingInt(a -> a[0]));
List<int[]> merged = new ArrayList<>();
for (int[] seg : combined) {
if (!merged.isEmpty() && seg[0] <= merged.get(merged.size()-1)[1] + 1) {
merged.get(merged.size()-1)[1] = Math.max(merged.get(merged.size()-1)[1], seg[1]);
} else {
merged.add(new int[]{seg[0], seg[1]});
}
}
intervals = merged;
}
int maxPos = intervals.get(intervals.size() - 1)[1];
System.out.println(maxPos - OFFSET);
}
}
Submission Info
| Submission Time | |
|---|---|
| Task | E - A Walk and Barricades |
| User | Bhuvaneshwari03 |
| Language | Java24 (OpenJDK 24.0.2) |
| Score | 466 |
| Code Size | 4770 Byte |
| Status | AC |
| Exec Time | 313 ms |
| Memory | 65900 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 466 / 466 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample01.txt, sample02.txt, sample03.txt, sample04.txt, sample05.txt |
| All | sample01.txt, sample02.txt, sample03.txt, sample04.txt, sample05.txt, in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in30.txt, in31.txt, in32.txt, in33.txt, in34.txt, in35.txt, in36.txt, in37.txt, in38.txt, in39.txt, in40.txt, in41.txt, in42.txt, in43.txt, in44.txt, in45.txt, in46.txt, in47.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| in01.txt | AC | 73 ms | 40300 KiB |
| in02.txt | AC | 59 ms | 40592 KiB |
| in03.txt | AC | 58 ms | 40676 KiB |
| in04.txt | AC | 61 ms | 40604 KiB |
| in05.txt | AC | 62 ms | 40712 KiB |
| in06.txt | AC | 61 ms | 40460 KiB |
| in07.txt | AC | 61 ms | 40432 KiB |
| in08.txt | AC | 62 ms | 40592 KiB |
| in09.txt | AC | 66 ms | 40688 KiB |
| in10.txt | AC | 62 ms | 40324 KiB |
| in11.txt | AC | 65 ms | 40596 KiB |
| in12.txt | AC | 84 ms | 40928 KiB |
| in13.txt | AC | 58 ms | 40720 KiB |
| in14.txt | AC | 59 ms | 40668 KiB |
| in15.txt | AC | 62 ms | 40384 KiB |
| in16.txt | AC | 60 ms | 40560 KiB |
| in17.txt | AC | 64 ms | 40380 KiB |
| in18.txt | AC | 59 ms | 40500 KiB |
| in19.txt | AC | 62 ms | 40552 KiB |
| in20.txt | AC | 61 ms | 40408 KiB |
| in21.txt | AC | 60 ms | 40624 KiB |
| in22.txt | AC | 62 ms | 40172 KiB |
| in23.txt | AC | 62 ms | 40704 KiB |
| in24.txt | AC | 64 ms | 40768 KiB |
| in25.txt | AC | 60 ms | 40424 KiB |
| in26.txt | AC | 62 ms | 40376 KiB |
| in27.txt | AC | 63 ms | 40388 KiB |
| in28.txt | AC | 63 ms | 40628 KiB |
| in29.txt | AC | 76 ms | 40688 KiB |
| in30.txt | AC | 65 ms | 40972 KiB |
| in31.txt | AC | 211 ms | 63456 KiB |
| in32.txt | AC | 224 ms | 63252 KiB |
| in33.txt | AC | 210 ms | 61476 KiB |
| in34.txt | AC | 216 ms | 60392 KiB |
| in35.txt | AC | 218 ms | 64172 KiB |
| in36.txt | AC | 225 ms | 63300 KiB |
| in37.txt | AC | 206 ms | 62788 KiB |
| in38.txt | AC | 289 ms | 65464 KiB |
| in39.txt | AC | 281 ms | 65100 KiB |
| in40.txt | AC | 313 ms | 65900 KiB |
| in41.txt | AC | 286 ms | 65636 KiB |
| in42.txt | AC | 242 ms | 62748 KiB |
| in43.txt | AC | 305 ms | 65844 KiB |
| in44.txt | AC | 296 ms | 65000 KiB |
| in45.txt | AC | 218 ms | 62252 KiB |
| in46.txt | AC | 307 ms | 65276 KiB |
| in47.txt | AC | 298 ms | 64484 KiB |
| sample01.txt | AC | 62 ms | 40720 KiB |
| sample02.txt | AC | 62 ms | 40164 KiB |
| sample03.txt | AC | 62 ms | 40556 KiB |
| sample04.txt | AC | 63 ms | 40844 KiB |
| sample05.txt | AC | 59 ms | 40660 KiB |