Count O(max(N,M))
We can count the number of valid subarrays ending in each index i.
Since the array is already sorted and all elements are unique in [1, N] ,
we only have to find the largest index j that is smaller that i that are either poisonous or allergic to each other (hope I understand the question correctly),
then, for that index i, we will update j to max(j, jump[i])
The answer will be the sum of all valid subarrays that end at each index i.
Time O(max(N, M))
Space O(N)
private static long solve(int N, int[] P, int[] A){ // Java
int[] jump = new int[N+1];
for (int i = 0; i < P.length; i++){
for (int[] a : new int[][]{{A[i], P[i]}, {P[i], A[i]}}){
if (a[0] < a[1] && a[0] > jump[a[1]]){
jump[a[1]] = a[0]; // log the largest index less than it that are incompatible.
}
}
}
long ans = 0;
for (int i = 0, j = 0; i <= N; i++){
j = Math.max(jump[i], j);
ans += i - j;
}
return ans;
}