比赛 防止浮躁的小练习v0.5 评测结果 AAAAAAAAAA
题目名称 罗伊德的防晒霜 最终得分 100
用户昵称 Ostmbh 运行时间 1.030 s
代码语言 C++ 内存使用 15.57 MiB
提交时间 2016-10-15 18:47:35
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct T{
	int a,b;
	bool operator<(const T& c)const{
		return a<c.a;
	}
}A[1000010];
T u[1000010];
const int XTT=19283746;
int ans=0;
inline void read(int &x){
	x=0;
	char c=getchar();
	while(c<'0'||c>'9')
		c=getchar();
	while(c>='0'&&c<='9'){
		x=(x<<3)+(x<<1)+c-'0';
		c=getchar();
	}
}
inline void merge(int l,int r){
	if(l>=r)
		return ;
	int mid=(l+r)>>1;
	merge(l,mid);
	merge(mid+1,r);
	int q=l,p=mid+1,x=l;
	while(q<=mid||p<=r){
		if(p>r||(q<=mid&&A[q].b<=A[p].b))
			u[x++]=A[q++];
		else u[x++]=A[p++],ans+=(mid-q+1)%XTT,ans%=XTT;
	}
	for(int i=l;i<=r;i++)
		A[i]=u[i];
}
int main(){
	freopen("EOADtulad.in","r",stdin);
	freopen("EOADtulad.out","w",stdout);
	int n;
	read(n);
	for(int i=1;i<=n;i++)
		read(A[i].a),read(A[i].b);
	sort(A+1,A+n+1);
	merge(1,n);
	printf("%d\n",ans%XTT);
return 0;
}