题目描述
You have a card deck of n cards, numbered from top to bottom, i. e. the top card has index 1 and bottom card — index n. Each card has its color: the i-th card has color ai.
You should process q queries. The j-th query is described by integer tj. For each query you should:
find the highest card in the deck with color tj, i. e. the card with minimum index;
print the position of the card you found;
take the card and place it on top of the deck.
Input
The first line contains two integers n and q (2≤n≤3⋅105; 1≤q≤3⋅105) — the number of cards in the deck and the number of queries.
The second line contains n integers a1,a2,…,an (1≤ai≤50) — the colors of cards.
The third line contains q integers t1,t2,…,tq (1≤tj≤50) — the query colors. It’s guaranteed that queries ask only colors that are present in the deck.
Output
Print q integers — the answers for each query.
7 5
2 1 1 4 3 3 1
3 2 1 1 4
5 2 3 1 5
Note
Description of the sample:
- the deck is [2, 1, 1, 4, \underline{3}, 3, 1][2,1,1,4,3,3,1] and the first card with color t_1 = 3t1=3 has position 55;
- the deck is [3, \underline{2}, 1, 1, 4, 3, 1][3,2,1,1,4,3,1] and the first card with color t_2 = 2t2=2 has position 22;
- the deck is [2, 3, \underline{1}, 1, 4, 3, 1][2,3,1,1,4,3,1] and the first card with color t_3 = 1t3=1 has position 33;
- the deck is [\underline{1}, 2, 3, 1, 4, 3, 1][1,2,3,1,4,3,1] and the first card with color t_4 = 1t4=1 has position 11;
- the deck is [1, 2, 3, 1, \underline{4}, 3, 1][1,2,3,1,4,3,1] and the first card with color t_5 = 4t5=4 has position 55.
本题主要是找到对应数的位置,以及将此数移到最前面。可以考虑vector,vector是一个不定长数组,已经封装好的容器。algorithm头文件中的find函数 ,find(begin,end,value),第一个参数是数组或容器的起始地址,第二个参数是结束查找的地址,第三个参数是要查找的字符或字符串。查找成功返回的是地址。rotate函数用于在给定范围内,左旋转序列中的元素,此题可以把找到的对应数左旋到最前面。rotate(begin,middle,end),middle到end范围内的元素左旋,middle指向元素将成为新序列的第一个元素。
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n,q,x;
cin>>n>>q;
vector<int> v(n);//声明一个vector,相当于定义一个int v[n]
for(int i=0;i<n;i++)
{
cin>>x;
v[i]=x;
}
while(q--)
{
int t;
cin>>t;
int p = find(v.begin(),v.end(),t) - v.begin();//减去数组的首地址
cout<<p+1<<' ';
rotate(v.begin(),v.begin()+p,v.begin()+p+1);
}
return 0;
}