比赛 NOIP模拟赛1 评测结果 AAAAAAAAAA
题目名称 叉叉 最终得分 100
用户昵称 Ceres 运行时间 0.078 s
代码语言 C++ 内存使用 1.98 MiB
提交时间 2018-02-08 20:19:20
显示代码纯文本
#include <cstdio>
#include <string>
using namespace std;
int tree[200010]={0},a[100010]={0},len=0,ans=0,be[200010]={0};
int lowbit(int x)
{
	return x&-x;
}
int getnum(int x)
{
	int num=0;
	for(int i=x;i>=1;i-=lowbit(i))
		num+=tree[i];
	return num;
}
void add(int x,int y)
{
	for(int i=x;i<=len;i+=lowbit(i))
		tree[i]+=y;
}
int main()
{
	freopen("xxxx.in","r",stdin);
	freopen("xxxx.out","w",stdout);
	char s;
	while(scanf("%c",&s)!=EOF)
	{
		a[++len]=s-'a'+1;
	}
	for(int i=1;i<=len;i++)
		if(!be[a[i]])
		{		
			be[a[i]]=i;
			add(i,1);
		}
		else
		{
			ans+=(getnum(i-1)-getnum(be[a[i]]));
			add(be[a[i]],-1);
			be[a[i]]=0;
		}
	printf("%d",ans);
	return 0;
}