比赛 防止浮躁的小练习v0.4 评测结果 AAAAAAAAAA
题目名称 罗伊德的防晒霜 最终得分 100
用户昵称 NVIDIA 运行时间 1.345 s
代码语言 C++ 内存使用 11.76 MiB
提交时间 2016-10-13 17:43:31
显示代码纯文本
#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;

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); 
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&line[i].a,&line[i].b);
	}
	sort(line+1,line+n+1,cmp);
	Merge_sort(1,n);
	printf("%d",ans%MOD);
}