本腊鸡没什么想法,一开始想构建个二维数组淦,但题目给的数据是
于是换个思路:构建
Description
转眼间,奥运走向了尾声。QWQ要策划一场闭幕式演出。QWQ策划的是一个方阵表演。在表演中,运动员们将排成一个
方便起见,本题中我们用正整数来指代各种动作。初始时,运动员们都没有动作,记为动作
QWQ选取方阵的一行 / 一列,并让这一行 / 这一列的运动员们统一做出某个动作;
QWQ想知道,现在位于第
行第 列的选手做的是什么动作。
QWQ还忙着其他工作。你能帮帮他,回答他的问题吗?
Input
第一行两个正整数接下来
:这一行接下来两个整数 表示第 行的运动员全部做出 动作。 :这一行接下来两个整数 表示第 列的运动员全部做出 动作。 :这一行接下来两个整数 你需要回答第 行第 列的运动员做了什么动作。 Output
对于每组询问输出一个整数表示答案。
#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;
}