| 比赛 |
期末考试2 |
评测结果 |
AAAAAAAWAA |
| 题目名称 |
魔法 |
最终得分 |
90 |
| 用户昵称 |
xuyuqing |
运行时间 |
0.783 s |
| 代码语言 |
C++ |
内存使用 |
58.63 MiB |
| 提交时间 |
2026-02-10 10:33:43 |
显示代码纯文本
#include <algorithm>
#include <bitset>
#include <cstdio>
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
class fastIn {
private:
char buf [1 << 20];
char *p1 = buf;
char *p2 = buf;
inline char getch ();
public:
template <typename NumT>
void read (NumT &num);
template <typename NumT>
fastIn& operator >> (NumT &num);
};
inline char fastIn::getch () {
if (p1 == p2) {
p1 = buf;
p2 = buf + fread (buf, 1, 1 << 20, stdin);
if (p1 == p2) {
return EOF;
}
}
return *p1++;
}
template <typename NumT>
void fastIn::read (NumT &num) {
char ch = getch ();
NumT op = 1;
num = 0;
while (ch < '0' || '9' < ch) {
op = ((ch == '-') ? -1 : 1);
ch = getch ();
}
while ('0' <= ch && ch <= '9') {
num *= 10;
num += (ch - '0');
ch = getch ();
}
num *= op;
}
template <typename NumT>
fastIn& fastIn::operator >> (NumT &num) {
read (num);
return *this;
}
fastIn fin;
constexpr int N = 114514;
constexpr int K = 13;
int n;
int k;
int q;
int a[K][N];
pair<int, int> magic[N][K];
int now;
bitset<(1 << K)> b[N];
int cc;
int main () {
freopen ("breeding.in", "r", stdin);
freopen ("breeding.out", "w", stdout);
fin >> n >> k >> q;
for (int i = 1; i <= k; i++) {
for (int j = 1; j <= n; j++) {
fin >> a[i][j];
magic[j][i] = make_pair (a[i][j], i);
}
}
for (int i = 1; i <= n; i++) {
sort (magic[i] + 1, magic[i] + 1 + k);
reverse (magic[i] + 1, magic[i] + 1 + k);
}
for (int i = 1; i <= k; i++) {
for (int j = 0; j < (1 << k); j++) {
if (j & (1 << (i - 1))) {
b[i][j] = 1;
}
}
}
cc = k;
for (int i = 1; i <= q; i++) {
int opt, x, y;
fin >> opt >> x >> y;
if (opt == 1) {
cc++;
b[cc] = b[x] | b[y];
}
else if (opt == 2) {
cc++;
b[cc] = b[x] & b[y];
}
else {
int t = 0;
for (int i = 1; i <= k; i++) {
t |= (1 << (magic[y][i].second - 1));
if (b[x][t]) {
printf ("%d\n", a[magic[y][i].second][y]);
break;
}
}
}
}
return 0;
}