比赛描述
仙灵女巫露露,对于魔法的热忱可是超出常人,要是发现了什么上古遗留下的魔法,她总是想方设法地获得,然后研究分析。而最近,他又从邪恶小法师维嘉那里获得了一个“奇怪”的魔法卷轴;
这个魔法卷轴上有一大串数字,而且根据卷轴上的描述,这个魔法的威力指数来自于这一串数字中“魔法区间”的数量;
所谓“魔法区间”指的是一段连续的闭区间,且这段区间上的所有数字均不相同;
现在,露露想知道这个魔法的威力指数,你能帮帮她么?
输入
先输入一个正整数T,表示样例个数,1≤T≤10。
对于每一个样例,先输入一个正整数n,表示卷轴上的数字个数(1≤n≤106);
再输入n个整数,第i个数ai,表示卷轴上第i个数(0≤ai≤106)。
输出
对于每个样例,输出一个正整数,即威力指数。
题目保证结果在int范围内。
样例输入
1
3
1 2 3
样例输出
6
提示
读入数据请使用 scanf();
对于样例,共有{1},{2},{3},{1,2},{2,3},{1,2,3},6个魔法区间,所以威力为6。
题目来源
yuman
#include<iostream> #define MAX_N 1000001 int a[MAX_N]; bool visited[MAX_N]; int main(){ int t,n,i,count,begin,end; scanf("%d",&t); while(t--){ count = 0; memset(visited,0,sizeof(visited)); scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",a+i); } begin=end=0; while(begin!=n){ while(end!=n && !visited[a[end]]){ visited[a[end]] = 1; end++; } count += end-begin; visited[a[begin]] = 0; begin++; } printf("%d\n",count); } }