比赛 |
防止浮躁的小练习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;
}