您的位置:首页 > 编程语言 > Go语言

HOJ_2430 Counting the algorithms

2013-02-21 12:24 459 查看
#include <stdio.h>
#include <cstring>
const int maxn=2*100001;
int c[maxn],a[maxn];
bool judge[100001];
int f[100001];
inline int lowbit(int x)
{
return x&(-x);
}
void update(int x,int p)
{
for(int i=x; i<maxn; i+=lowbit(i))
c[i]+=p;
}
int sum(int x)
{
int ans=0;
for(int i=x; i>0; i-=lowbit(i))
ans+=c[i];
return ans;
}
int main()
{
int n;
while(scanf("%d",&n)==1)
{
memset(c,0,sizeof(c));
memset(judge,false,sizeof(judge));
memset(f,0,sizeof(f));
for(int i=1; i<=2*n; i++)
{
scanf("%d",&a[i]);
update(i,1);
if(!judge[a[i]]) judge[a[i]]=true;
else f[a[i]]=i;
}
int ans=0;
for(int i=1;i<=2*n;i++)
{
ans+=sum(f[a[i]])-sum(i);
update(f[a[i]],-1);
}
printf("%d\n",ans);
}
return 0;
}

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: