比赛 防止浮躁的小练习v0.5 评测结果 AAAAAAAAAA
题目名称 罗伊德的防晒霜 最终得分 100
用户昵称 NVIDIA 运行时间 1.030 s
代码语言 C++ 内存使用 11.76 MiB
提交时间 2016-10-15 18:44:06
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1e6+10,MOD=19283746;
struct LINE{
	int a,b;
}line[maxn];

int n;
int tmp[maxn];
int ans;
inline int read()
{
	int x=0;
	char c=getchar();
	while(c<'0'||c>'9')
		c=getchar();
	while(c>='0'&&c<='9')
	{
		x=x*10+c-'0';
		c=getchar();
	}
	return x;
}
int cmp(const LINE &x,const LINE &y){
	return x.a<y.a;
}

void Merge(int l,int m,int r)  
{  
    int i = l;  
    int j = m + 1;  
    int k = l;  
    while(i <= m && j <= r)  
    {  
        if(line[i].b > line[j].b)  
        {  
            tmp[k++] = line[j++].b;  
            ans=(ans+ m-i+1)%MOD;  
        }  
        else  
        {  
            tmp[k++] = line[i++].b;  
        }  
    }  
    while(i <= m) tmp[k++] = line[i++].b;  
    while(j <= r) tmp[k++] = line[j++].b;  
    for(int i=l;i<=r;i++)  
        line[i].b = tmp[i];  
}  
  
void Merge_sort(int l,int r)  
{  
    if(l < r)  
    {  
        int m = (l + r) >> 1;  
        Merge_sort(l,m);  
        Merge_sort(m+1,r);  
        Merge(l,m,r);  
    }  
}

int main() 
{
    freopen("EOADtulad.in","r",stdin);
    freopen("EOADtulad.out","w",stdout); 
	n=read();
	for(int i=1;i<=n;i++)
	{
		line[i].a=read();
		line[i].b=read();
	}
	sort(line+1,line+n+1,cmp);
	Merge_sort(1,n);
	printf("%d",ans%MOD);
}