제출 #234712

#제출 시각아이디문제언어결과실행 시간메모리
234712amoo_safarTenis (COI19_tenis)C++14
100 / 100
275 ms8952 KiB
#include <bits/stdc++.h>

#define pb push_back
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define debug(x) cerr << #x << " : " << x << '\n'

using namespace std;

typedef long long ll;
typedef long double ld;
typedef string str;
typedef pair<int, int> pii;

const ll Mod = 1000000007LL;
const int N = 1e5 + 10;
const ll Inf = 2242545357980376863LL;
const ll Log = 30;

int n, p[4][N], ind[4][N];

int lz[N << 2];
pii seg[N << 2];
void Build(int id, int L, int R){
	if(L + 1 == R){
		seg[id] = {0, L};
		return ;
	}
	int mid = (L + R) >> 1;
	Build(id << 1, L, mid);
	Build(id << 1 | 1, mid, R);
	seg[id] = min(seg[id << 1], seg[id << 1 | 1]);
	seg[id].F += lz[id];
}
void Add(int id, int l, int r, int x, int L, int R){
	if(r <= L || R <= l) return ;
	if(l <= L && R <= r){
		lz[id] += x; seg[id].F += x;
		return ;
	}
	int mid = (L + R) >> 1;
	Add(id << 1, l, r, x, L, mid);
	Add(id << 1 | 1, l, r, x, mid, R);
	seg[id] = min(seg[id << 1], seg[id << 1 | 1]);
	seg[id].F += lz[id];
}

void Apply(int x, int d){
	int l = min({ind[1][x], ind[2][x], ind[3][x]});
	int r = max({ind[1][x], ind[2][x], ind[3][x]});
	Add(1, l, r, d, 1, n + 1);
	//cerr << "! " << l << ' ' << r << ' ' << d << '\n';
}

int main(){
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int q;
	cin >> n >> q;
	for(int k = 1; k <= 3; k++) for(int i = 1; i <= n; i++){
		cin >> p[k][i];
		ind[k][p[k][i]] = i;
	}
	Build(1, 1, n + 1);
	for(int i = 1; i <= n; i++) Apply(i, 1);
	int t, x, a, b, P;
	for(int i = 0; i < q; i++){
		//cerr << seg[1].F << ' ' << seg[1].S << '\n';
		cin >> t;
		if(t == 1){
			cin >> x;
			cout << (min({ind[1][x], ind[2][x], ind[3][x]}) <= seg[1].S ? "DA" : "NE") << '\n';
		} else {
			cin >> P >> a >> b;
			Apply(a, -1);
			Apply(b, -1);
			p[P][ind[P][a]] = b;
			p[P][ind[P][b]] = a;
			swap(ind[P][a], ind[P][b]);
			Apply(a, 1);
			Apply(b, 1);	
		}
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...