QwQ和表演

本腊鸡没什么想法,一开始想构建个二维数组淦,但题目给的数据是,爆掉了

于是换个思路:构建两个二维数组分别记录操作及该操作的序号,对查询进行从后搜索


Description

转眼间,奥运走向了尾声。QWQ要策划一场闭幕式演出。

QWQ策划的是一个方阵表演。在表演中,运动员们将排成一个 的方阵,做出各种各样的动作。

方便起见,本题中我们用正整数来指代各种动作。初始时,运动员们都没有动作,记为动作。接下来会发生次事件:

  • QWQ选取方阵的一行 / 一列,并让这一行 / 这一列的运动员们统一做出某个动作;

  • QWQ想知道,现在位于第 行第 列的选手做的是什么动作。

QWQ还忙着其他工作。你能帮帮他,回答他的问题吗?

Input

第一行两个正整数 分别表示需要维护的矩阵的大小和操作的数量。

接下来 行,每行首先是一个字符 ,表示操作的类型。 的取值及对应的意义如下:

  • :这一行接下来两个整数 表示第 行的运动员全部做出 动作。

  • :这一行接下来两个整数 表示第 列的运动员全部做出 动作。

  • :这一行接下来两个整数 你需要回答第行第 列的运动员做了什么动作。

    Output

    对于每组询问输出一个整数表示答案。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>

#define LL long long
#define IN freopen("in.txt", "r", stdin)
#define OUT freopen("out.txt", "w", stdout)
#define scan(x) scanf("%d", &x)
#define sqr(x) (x) * (x)
#define f(i, a, b) for (int i = a; i <= b; i++)
#define pn(x) printf("%d", x)
#define pr1(x) printf("Case %d: ", x)
#define pn1(x) printf("Case %d:\n", x)
#define pr2(x) printf("Case #%d: ", x)
#define pn2(x) printf("Case #%d:\n", x)
#define lowbit(x) (x & (-x))
int h[100000][3], l[100000][3], cnth = 0, cntl = 0, cnt = 0;

int check(int x, int y)
{
int jg = -1, mid = -1;
for (int j = cntl - 1; j >= 0; j--)
{
if (y == l[j][0])
{
jg = l[j][1];
mid = l[j][2];
break;
}
}
for (int j = cnth - 1; j >= 0; j--)
{
if (x == h[j][0])
{
if (mid > h[j][2])
{
printf("%d\n", jg);
return 0;
}
else
{
printf("%d\n", h[j][1]);
return 0;
}
}
}
if (jg != -1)
printf("%d\n", jg);
else
printf("0\n");
return 0;
}

int main()
{
//IN;
//OUT;
int n, q;
scan(n);
scan(q);
f(i, 1, q)
{
char c[3];
scanf("%s", c);
if (c[0] == 'R')
{
int i, v;
scan(i);
scan(v);
h[cnth][2] = cnt++;
h[cnth][0] = i;
h[cnth++][1] = v;
}
else if (c[0] == 'C')
{
int i, v;
scan(i);
scan(v);
l[cntl][2] = cnt++;
l[cntl][0] = i;
l[cntl++][1] = v;
}
else if (c[0] == 'Q')
{
int x, y;
scan(x);
scan(y);
check(x, y);
}
}
return 0;
}