10pt求助
查看原帖
10pt求助
56646
jun君楼主2021/8/16 21:38
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<fstream>
#define N 1000010
#define mod 99999997
#define int long long
using namespace std;
int n,c[N],ansh,num;
struct st{
	int a,b;
}a[N];
struct st2{
	int val,id;
}b[N];
bool cmp(st2 a,st2 b){
	if (a.val==b.val)return a.id<b.id;
	return a.val<b.val;
}
bool cmp2(st a,st b){
	return a.a<b.a;
}
int lowbit(int x){return x&(-x);}
void update(int x,int y){
	for (int i=x;i<=n;i+=lowbit(i))c[i]=(c[i]+y)%mod;
}
int query(int x){
	int ans=0;
	for (int i=x;i>=1;i-=lowbit(i))ans=(ans+c[i])%mod;
	return ans;
}
signed main()
{
//	freopen("q.in","r",stdin);
	scanf("%lld",&n);
	for (int i=1;i<=n;i++){
		scanf("%lld",&a[i].a);
		b[i].val=a[i].a;
		b[i].id=i;
	}
	sort(b+1,b+1+n,cmp);
	for (int i=1;i<=n;i++){
//		if (b[i].val!=b[i-1].val){num++;}//互不相同…… 
		a[b[i].id].a=i;
	} 
	for (int i=1;i<=n;i++){
		scanf("%lld",&a[i].b);
		b[i].val=a[i].b;
		b[i].id=i;
	}
	sort(b+1,b+1+n,cmp);
	for (int i=1;i<=n;i++){
//		if (b[i].val!=b[i-1].val){num++;}
		a[b[i].id].b=i;
	}
	sort(a+1,a+1+n,cmp2);
	for (int i=1;i<=n;i++){
//		printf("%lld: %lld %lld\n",i,a[i].a,a[i].b);
		ansh=(ansh+i-1ll-query(a[i].b))%mod;
		update(a[i].b,1);
	}
	printf("%lld\n",ansh);
	return 0;
}
2021/8/16 21:38
加载中...