链接
题目描述
有n次操作,每次操作将会交换位置a,b的2个小球(下标从0编号)
有m次询问,每次询问,将杯子中的小球重置为初始状态。
给出[li,ri],连续从操作li进行到ri,
连续操作完后依次回答位置0到9,对应位置的小球编号。
思路
直接把每次操作按顺序预处理,然后每次把l-1的操作状态设为初始状态
再把r状态的对应位置输出就好了
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n, m, l, r, a[15], b[100005][11], c[15];
int read()
{
int x = 0, flag = 1; char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') flag = -1; ch = getchar();}
while (ch >= '0' && ch <= '9'){
x = x * 10 + ch - '0'; ch = getchar();}
return x * flag;
}
void write(int x)
{
if (x < 0) {
x = -x;
putchar('-');
}
if (x > 9) write(x / 10);
putchar(x % 10 + 48);
putchar(' ');
return;
}
int main()
{
n = read(); m = read();
for(int i = 0; i <= 9; ++i) a[i] = i, b[0][i] = a[i];
for(int i = 1; i <= n; ++i) {
l = read(); r = read();
swap(a[l], a[r]);
for(int j = 0; j <= 9; ++j)
b[i][j] = a[j];
}
for(int i = 1; i <= m; ++i)
{
l = read(); r = read();
for(int j = 0; j <= 9; ++j)
c[b[l - 1][j]] = j;
for(int j = 0; j <= 9; ++j)
write(c[b[r][j]]);
putchar('\n');
}
return 0;
}