#include <stdio.h>
#include <string.h>
int x[1000002]; // 原数列
int w[1000002]; // w[i]记录长度为i的后缀数列里面的unique元素的个数
long long dp[1000002];
int dp2[1000002]; // dp[i]记录有多少个元素的前一个相同元素的下标与该元素下标的差是i
int main()
{
int n,i,cc;
while(scanf("%d",&n)&&n) // 输入数列长度
{
memset(dp,0,sizeof(dp)); // 此时dp[i]记录i这个元素出现的最大下标,初始化为0
memset(dp2,0,sizeof(dp2));
for(i=1;i<=n;i++)
{
scanf("%d",x+i); // 读取原数列第i个数
dp2[i-dp[x[i]]]++; // 获取x[i]前一个相同元素的下标、做差、存进dp2
dp[x[i]] = i; // 更新x[i]这个元素的最大下标,存进dp
}
cc = 0; // 记录后缀数组中unique元素的个数,初始化为0
memset(dp,0,sizeof(dp)); // 重用dp数组,这里dp[i]记录的是i这个元素是否出现后缀数列中
for(i=n;i>=1;i--) // 从n枚举到1
{
if(dp[x[i]]==0) cc++; // 如果x[i]未出现在后缀数组中,则增加cc
dp[x[i]]=1; // 记录已出现在后缀数组中,存进dp
w[n-i+1] = cc; // 长度为n-i+1的后缀中unique元素的个数,存进w
}
dp[1] = n; // 重用dp数组,这里dp[i]表示询问为i的时候的答案,当询问是1的时候,答案必然是n
cc = n; // 重用cc,记录当前增量
for(i=2;i<=n;i++) // 从2到n枚举
{
// 询问为i的结果可以由询问为i-1的结果递推
dp[i] = dp[i-1] - w[i-1]; // 当询问为i-1的时候,最后一个区间无法添加新的数字,
// 所以结果里面要减去长度为i-1的后缀数列里面的unique元素的个数
cc -= dp2[i-1]; // 和前一个相同元素下标差为i-1的元素从这里开始不再存在增量
dp[i] += cc; // 每个区间都多增加了一个元素,一共有cc个区间会增加一个新的unique元素
}
scanf("%d",&cc); // 以下为查询
while(cc--)
{
scanf("%d",&i);
printf("%I64d\n",dp[i]);
}
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmludCB4WzEwMDAwMDJdOyAvLyDljp/mlbDliJcKaW50IHdbMTAwMDAwMl07IC8vIHdbaV3orrDlvZXplb/luqbkuLpp55qE5ZCO57yA5pWw5YiX6YeM6Z2i55qEdW5pcXVl5YWD57Sg55qE5Liq5pWwCmxvbmcgbG9uZyBkcFsxMDAwMDAyXTsKaW50IGRwMlsxMDAwMDAyXTsgLy8gZHBbaV3orrDlvZXmnInlpJrlsJHkuKrlhYPntKDnmoTliY3kuIDkuKrnm7jlkIzlhYPntKDnmoTkuIvmoIfkuI7or6XlhYPntKDkuIvmoIfnmoTlt67mmK9pCgppbnQgbWFpbigpCnsKICAgIGludCBuLGksY2M7Cgl3aGlsZShzY2FuZigiJWQiLCZuKSYmbikgLy8g6L6T5YWl5pWw5YiX6ZW/5bqmCgl7CgkJbWVtc2V0KGRwLDAsc2l6ZW9mKGRwKSk7IC8vIOatpOaXtmRwW2ld6K6w5b2Vaei/meS4quWFg+e0oOWHuueOsOeahOacgOWkp+S4i+agh++8jOWIneWni+WMluS4ujAKCQltZW1zZXQoZHAyLDAsc2l6ZW9mKGRwMikpOwoJCWZvcihpPTE7aTw9bjtpKyspCgkJewoJCQlzY2FuZigiJWQiLHgraSk7IC8vIOivu+WPluWOn+aVsOWIl+esrGnkuKrmlbAKCQkJZHAyW2ktZHBbeFtpXV1dKys7IC8vIOiOt+WPlnhbaV3liY3kuIDkuKrnm7jlkIzlhYPntKDnmoTkuIvmoIfjgIHlgZrlt67jgIHlrZjov5tkcDIKCQkJZHBbeFtpXV0gPSBpOyAvLyDmm7TmlrB4W2ld6L+Z5Liq5YWD57Sg55qE5pyA5aSn5LiL5qCH77yM5a2Y6L+bZHAKCQl9CgkJY2MgPSAwOyAvLyDorrDlvZXlkI7nvIDmlbDnu4TkuK11bmlxdWXlhYPntKDnmoTkuKrmlbDvvIzliJ3lp4vljJbkuLowCgkJbWVtc2V0KGRwLDAsc2l6ZW9mKGRwKSk7IC8vIOmHjeeUqGRw5pWw57uE77yM6L+Z6YeMZHBbaV3orrDlvZXnmoTmmK9p6L+Z5Liq5YWD57Sg5piv5ZCm5Ye6546w5ZCO57yA5pWw5YiX5LitCgkJZm9yKGk9bjtpPj0xO2ktLSkgLy8g5LuObuaemuS4vuWIsDEKCQl7CgkJCWlmKGRwW3hbaV1dPT0wKSBjYysrOyAvLyDlpoLmnpx4W2ld5pyq5Ye6546w5Zyo5ZCO57yA5pWw57uE5Lit77yM5YiZ5aKe5YqgY2MKCQkJZHBbeFtpXV09MTsgLy8g6K6w5b2V5bey5Ye6546w5Zyo5ZCO57yA5pWw57uE5Lit77yM5a2Y6L+bZHAKCQkJd1tuLWkrMV0gPSBjYzsgLy8g6ZW/5bqm5Li6bi1pKzHnmoTlkI7nvIDkuK11bmlxdWXlhYPntKDnmoTkuKrmlbDvvIzlrZjov5t3CgkJfQoJCWRwWzFdID0gbjsgLy8g6YeN55SoZHDmlbDnu4TvvIzov5nph4xkcFtpXeihqOekuuivoumXruS4umnnmoTml7blgJnnmoTnrZTmoYjvvIzlvZPor6Lpl67mmK8x55qE5pe25YCZ77yM562U5qGI5b+F54S25pivbgoJCWNjID0gbjsgLy8g6YeN55SoY2PvvIzorrDlvZXlvZPliY3lop7ph48KCQlmb3IoaT0yO2k8PW47aSsrKSAvLyDku44y5YiwbuaemuS4vgoJCXsKCQkJLy8g6K+i6Zeu5Li6aeeahOe7k+aenOWPr+S7peeUseivoumXruS4umktMeeahOe7k+aenOmAkuaOqAoJCQlkcFtpXSA9IGRwW2ktMV0gLSB3W2ktMV07IC8vIOW9k+ivoumXruS4umktMeeahOaXtuWAme+8jOacgOWQjuS4gOS4quWMuumXtOaXoOazlea3u+WKoOaWsOeahOaVsOWtl++8jAoJCQkJCQkJCQkgIC8vIOaJgOS7pee7k+aenOmHjOmdouimgeWHj+WOu+mVv+W6puS4umktMeeahOWQjue8gOaVsOWIl+mHjOmdoueahHVuaXF1ZeWFg+e0oOeahOS4quaVsAoJCQljYyAtPSBkcDJbaS0xXTsgLy8g5ZKM5YmN5LiA5Liq55u45ZCM5YWD57Sg5LiL5qCH5beu5Li6aS0x55qE5YWD57Sg5LuO6L+Z6YeM5byA5aeL5LiN5YaN5a2Y5Zyo5aKe6YePCgkJCWRwW2ldICs9IGNjOyAvLyDmr4/kuKrljLrpl7Tpg73lpJrlop7liqDkuobkuIDkuKrlhYPntKDvvIzkuIDlhbHmnIljY+S4quWMuumXtOS8muWinuWKoOS4gOS4quaWsOeahHVuaXF1ZeWFg+e0oAoJCX0KCQlzY2FuZigiJWQiLCZjYyk7IC8vIOS7peS4i+S4uuafpeivogoJCXdoaWxlKGNjLS0pCgkJewoJCQlzY2FuZigiJWQiLCZpKTsKCQkJcHJpbnRmKCIlSTY0ZFxuIixkcFtpXSk7CgkJfQoJfQoKfQ==