Day8 -B

链接

B

题目描述

有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;
}

猜你喜欢

转载自blog.csdn.net/LTH060226/article/details/119736708