计数转换器
时间限制:1秒 内存限制:128M
题目描述
小可发明了一个计数转换器!对于一个序列,小可每使用一次计数转换器,这个序列就会发生一次转换,每个数字都会被替换成相应的出现次数。
比如对于序列1 2 1 1 3,使用一次计数转换器就会变成3 1 3 3 1。
小可使用了许多次计数转换器。现在小可需要多次查询某些元素在第k次使用计数转换器后的值。
输入描述
第一行一个正整数t(1≤t≤1000),代表有t组输入。
对于每组输入,第一行一个正整数n(1≤n≤2000),代表序列长度。
第二行n个正整数ai (1≤ai≤n),代表这个序列
第三行一个正整数q(1≤q≤10^5 ),代表有q次询问。
接下来q行,每行两个正整数x,k(1≤x≤n,0≤k≤10^9
),代表需要输出位置x的元素在第k次使用计数转换器后的值。
保证所有输入的n的总和不超过2000,所有输入的q的总和不超过10^5
输出描述
对于每组输入,输出每次询问的答案。
样例输入
2
7
2 1 1 4 3 1 2
4
3 0
1 1
2 2
6 1
2
1 1
2
1 0
2 1000000000
样例输出
1
2
3
3
1
2
主体部分怎么改才能不时间超限啊,求解答
这是我的代码{
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int a[2005];
for(int i=1; i<=n; i++){
cin>>a[i];
}
int q;
cin>>q;
while(q--){
int t[2005]={0},e[2005]={0},b[2005];
for(int i=1; i<=n; i++){
b[i]=a[i];
}
int c,d;
cin>>c>>d;
while(d--){
memset(t,0,sizeof(t));
for(int i=1; i<=n; i++){
t[b[i]]++;
}
int te=0;
for(int i=1; i<=n; i++){
if(e[i]!=b[i]){
te=1;
break;
}
}
if(te==0){
break;
}
for(int i=1; i<=n; i++){
b[i]=t[b[i]];
e[i]=t[b[i]];
}
}
cout<<b[c]<<endl;
}
}
return 0;
}
}