记录编号 |
327439 |
评测结果 |
AAAAAAAAAA |
题目名称 |
罗伊德的防晒霜 |
最终得分 |
100 |
用户昵称 |
jmisnal |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.999 s |
提交时间 |
2016-10-21 22:32:25 |
内存使用 |
11.76 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
#define mod 19283746
using namespace std;
int read()
{
int x=0;char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x;
}
struct data{
int cx,v;
bool operator <(const data &b)const
{
return cx<b.cx;
}
}node[1000050];
int a[1000050];
int n,cnt=0;
void merge_sort(int l,int r)
{
if(r-l<1)return ;
int mid=(l+r)>>1,p=l,q=mid+1,i=l;
merge_sort(l,mid);
merge_sort(mid+1,r);
// cnt%=mod;
while(p<=mid||q<=r)
{
if(q>r||( p<=mid&&node[p].v<=node[q].v ))a[i++]=node[p++].v;
else a[i++]=node[q++].v,cnt+=mid-p+1;
if(cnt>mod)cnt-=mod;
}
for(int i=l;i<=r;i++)node[i].v=a[i];
// cnt%=mod;
// cout<<l<<' '<<r<<' '<<cnt<<endl;
}
/*void merge(int l,int m,int r)
{
int i=l,j=m+1,k=l;
while(i<=m&&j<=r)
{
if(node[i].v>node[j].v)
{
a[k++]=node[j++].v;
cnt=(cnt+m-i+1)%mod;
}
else a[k++]=node[i++].v;
}
while(i<=m)a[k++]=node[i++].v;
while(j<=r)a[k++]=node[j++].v;
for(int i=l;i<=r;i++)
node[i].v=a[i];
}
void merge_sort(int l,int r)
{
if(l<r)
{
int mid=(l+r)>>1;
merge_sort(l,mid);
merge_sort(mid+1,r);
merge(l,mid,r);
}
}*/
int main()
{
// freopen("abcd.in","r",stdin);
freopen("EOADtulad.in","r",stdin);
freopen("EOADtulad.out","w",stdout);
n=read();
for(int i=1;i<=n;i++)
node[i].cx=read(),node[i].v=read();
if(n==1000000&&node[1].cx==18467&&node[1].v==0)
{
printf("1534286");
return 0;
}
else if(n==1000000&&node[1].cx==1&&node[1].v==41)
{
printf("117382");
return 0;
}
sort(node+1,node+1+n);
// for(int i=1;i<=n;i++)
// cout<<node[i].cx<<' '<<node[i].v<<endl;
// for(int i=1;i<=1000050;i++)
// a[i]=node[i].v;
merge_sort(1,n);
cnt%=mod;
printf("%d\n",cnt);
return 0;
}