记录编号 |
133320 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2013]火柴排队 |
最终得分 |
100 |
用户昵称 |
· |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.995 s |
提交时间 |
2014-10-27 19:40:23 |
内存使用 |
8.71 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long c[100001],w[100001];
int n;
long long lowbit(long long x)
{
return x&(-x);
}
long long sum(long long x)
{
long long ans=0;
while(x>0)
{
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
void add(long long x,long long y)
{
while(x<=n)
{
c[x]+=y;
x+=lowbit(x);
}
}
struct jiegouti
{
long long a;
long long k;
long long num;
}T[100001],F[100001],P[100001];
long long paixu(jiegouti a,jiegouti b)
{
if(a.a>b.a) return 1;
if(a.a==b.a)
{
if(a.num>b.num) return 1;
return 0;
}
return 0;
}
long long huanyuan(jiegouti a,jiegouti b)
{
return a.num<b.num;
}
int main()
{
freopen("MatchNOIP2013.in","r",stdin);
freopen("MatchNOIP2013.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++) cin>>T[i].a;
for(int i=1;i<=n;i++) cin>>F[i].a;
for(int i=1;i<=n;i++) T[i].num=i,F[i].num=i;
sort(T+1,T+n+1,paixu);
sort(F+1,F+n+1,paixu);
for(int i=1;i<=n;i++) T[i].k=i,F[i].k=i;
sort(T+1,T+n+1,huanyuan);
sort(F+1,F+n+1,huanyuan);
for(int i=1;i<=n;i++) w[T[i].k]=i;
for(int i=1;i<=n;i++) P[i].a=w[F[i].k];
for(int i=1;i<=n;i++) P[i].num=i;
sort(P+1,P+n+1,paixu);
for(int i=1;i<=n;i++) P[i].k=i;
sort(P+1,P+n+1,huanyuan);
long long ans=0;
for(int i=1;i<=n;i++)
{
add(P[i].k,1);
ans+=sum(P[i].k-1);
}
printf("%lld",ans%99999997);
}