This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define INF INT_MAX
const int N = 100'000 + 100, M = (2 << 17) + 10;
int n, q, p[3][N];
int R[N][3], seg[M][3][3];
void modify(int p, int Ra[3], int idx, int s = 1, int e = n + 1, int v = 1)
{
if(p < s || e <= p) return;
if(e - s == 1)
{
for(int i = 0; i < 3; i++)
seg[v][idx][i] = Ra[i];
return;
}
int mid = (s + e) / 2, lc = 2 * v, rc = lc + 1;
modify(p, Ra, idx, s, mid, lc);
modify(p, Ra, idx, mid, e, rc);
for(int i = 0; i < 3; i++)
seg[v][idx][i] = min(seg[lc][idx][i], seg[rc][idx][i]);
}
void get(int l, int idx, int out[], int r = n + 1, int s = 1, int e = n + 1, int v = 1)
{
if(r <= s || e <= l) return;
if(l <= s && e <= r) {
for(int i = 0; i < 3; i++)
out[i] = min(out[i], seg[v][idx][i]);
return;
}
int mid = (s + e) / 2, lc = 2 * v, rc = lc + 1;
get(l, idx, out, r, s, mid, lc), get(l, idx, out, r, mid, e, rc);
}
int BEST(int X) {
return min(R[X][0], min(R[X][1], R[X][2]));
}
void update(int X)
{
for(int i = 0; i < 3; i ++)
modify(R[X][i], R[X], i);
}
int query(int X)
{
int BR[3] = {};
for(int i = 0; i < 3; i++)
BR[i] = R[X][i];
while(true)
{
int prv[] = {BR[0], BR[1], BR[2]};
for(int i = 0; i < 3; i ++)
{
int bc[3] = {INF, INF, INF};
get(prv[i], 0, bc);
for(int j = 0; j < 3; j++)
BR[j] = min(BR[j], bc[j]);
}
bool same = true;
for(int i = 0; i < 3; i ++)
same &= (prv[i] == BR[i]);
if(same) break;
}
return min(BR[0], min(BR[1], BR[2]));
}
int main()
{
cin >> n >> q;
for(int j = 0; j < 3; j++)
for(int i = 1; i <= n; i ++) {
cin >> p[j][i];
R[p[j][i]][j] = i;
}
for(int i = 1; i <= n; i ++)
update(i);
while(q--)
{
int t;
cin >> t;
if(t == 1)
{
int X;
cin >> X;
int bestposs = query(X);
cout << (bestposs == 1 ? "DA" : "NE") << '\n';
}
else
{
int P, A, B;
cin >> P >> A >> B;
P--;
int ra = R[A][P], rb = R[B][P];
swap(p[P][ra], p[P][rb]);
swap(R[A][P], R[B][P]);
update(A);
update(B);
}
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |