Untitled diff

Created Diff never expires
1 Entfernung
Zeilen
Gesamt
Entfernt
Wörter
Gesamt
Entfernt
Um diese Funktion weiterhin zu nutzen, aktualisieren Sie auf
Diffchecker logo
Diffchecker Pro
75 Zeilen
13 Hinzufügungen
Zeilen
Gesamt
Hinzugefügt
Wörter
Gesamt
Hinzugefügt
Um diese Funktion weiterhin zu nutzen, aktualisieren Sie auf
Diffchecker logo
Diffchecker Pro
88 Zeilen
#include <bits/stdc++.h>
#include <bits/stdc++.h>
using namespace std;
using namespace std;
#define SIZE 100000
#define SIZE 100000
#define MAX_VALUE 100002
#define MAX_VALUE 100002
int main () {
int main () {
int T, N, Q;
int T, N, Q;
cin >> T;
cin >> T;
while(T--) {
while(T--) {
cin >> N >> Q;
cin >> N >> Q;
int arr[SIZE];
int arr[SIZE];
for (int i = 0; i < N; ++i)
for (int i = 0; i < N; ++i)
{
{
scanf("%d", arr+i);
scanf("%d", arr+i);
}
}
for (int q = 0; q < Q; ++q)
for (int q = 0; q < Q; ++q)
{
{
int a, b, c, d;
int a, b, c, d;
scanf("%d %d %d %d", &a, &b, &c, &d);
scanf("%d %d %d %d", &a, &b, &c, &d);
a--; b--; c--; d--;
a--; b--; c--; d--;
if(a < c && c <=b) {
int t = b;
b = c-1;
c = t+1;
} else if( c < a && a <= d) {
int t = a;
a = d+1;
d = t-1;
}
if(a == c || (b-a < 0)) {
cout << "YES" << endl;
continue;
}
int countNums1[MAX_VALUE+2] = {0}; // 1-indexed, and an extra element as sentinal value
int countNums1[MAX_VALUE+2] = {0}; // 1-indexed, and an extra element as sentinal value
int countNums2[MAX_VALUE+2] = {0};
int countNums2[MAX_VALUE+2] = {0};
int minArr = MAX_VALUE, maxArr = 1;
int minArr = MAX_VALUE, maxArr = 1;
for (int i = a, j=c; i <= b; ++i, j++)
for (int i = a, j=c; i <= b; ++i, j++)
{
{
countNums1[arr[i]]++;
countNums1[arr[i]]++;
countNums2[arr[j]]++;
countNums2[arr[j]]++;
minArr = min(min(minArr, arr[i]), arr[j]);
minArr = min(min(minArr, arr[i]), arr[j]);
maxArr = max(max(maxArr, arr[i]), arr[j]);
maxArr = max(max(maxArr, arr[i]), arr[j]);
}
}
// cout << minArr << " " << maxArr << endl;
// cout << minArr << " " << maxArr << endl;
int i = minArr, j = minArr;
int i = minArr, j = minArr;
int misMatch = 0;
int misMatch = 0;
do {
do {
while(countNums1[i] == 0 && i <= maxArr) {
while(countNums1[i] == 0 && i <= maxArr) {
i++;
i++;
}
}
if(i > maxArr)
if(i > maxArr)
break;
break;
while(countNums2[j] == 0 && j <= maxArr) {
while(countNums2[j] == 0 && j <= maxArr) {
j++;
j++;
}
}
if(j > maxArr)
if(j > maxArr)
break;
break;
if(i != j) {
if(i != j) {
int minC = min(countNums1[i], countNums2[j]);
int minC = min(countNums1[i], countNums2[j]);
misMatch += minC;
misMatch += minC;
countNums1[i] -= minC;
countNums1[i] -= minC;
countNums2[j] -= minC;
countNums2[j] -= minC;
} else {
} else {
if(countNums1[i] < countNums2[j]) {
if(countNums1[i] < countNums2[j]) {
countNums2[j] -= countNums1[i];
countNums2[j] -= countNums1[i];
i++;
i++;
} else if(countNums2[j] < countNums1[i]) {
} else if(countNums2[j] < countNums1[i]) {
countNums1[i] -= countNums2[j];
countNums1[i] -= countNums2[j];
j++;
j++;
} else {
} else {
i++;
i++;
j++;
j++;
}
}
}
}
} while(misMatch < 2);
} while(misMatch < 2);
if(misMatch < 2)
if(misMatch < 2)
cout << "YES" << endl;
cout << "YES" << endl;
else
else
cout << "NO" << endl;
cout << "NO" << endl;
}
}
}
}
return 0;
return 0;
}
}