比赛 防止浮躁的小练习v0.5 评测结果 AWWWWWWWWW
题目名称 罗伊德的防晒霜 最终得分 10
用户昵称 rewine 运行时间 0.256 s
代码语言 C++ 内存使用 4.89 MiB
提交时间 2016-10-15 16:47:01
显示代码纯文本
  1. #pragma warning(disable: 4786)
  2. #pragma G++ optimize ("O2")
  3. #pragma comment(linker, "/STACK:1024000000,1024000000")
  4. #include <vector>
  5. #include <cstdio>
  6. #include <cstring>
  7. #include <algorithm>
  8. #include <cctype>
  9. #include <iostream>
  10. #define Max(a,b) (a>b ? a:b)
  11. #define Min(a,b) (a<b ? a:b)
  12. #define Rep(_i,x,y) for(int _i = x; _i <= y;_i++)
  13. using namespace std;
  14. typedef unsigned int lg;
  15. #define MAXX 100009
  16. #define int long long
  17. #define mod 99999997;
  18. inline bool read(int &x){
  19. char c=getchar();
  20. while(c!=EOF&&!isdigit(c)) c=getchar();
  21. if(c==EOF) return 0; x=0;
  22. while(isdigit(c)) {
  23. x=x*10+c-'0';
  24. c=getchar();
  25. }
  26. return 1;
  27. }
  28. int n,ans = 0;
  29. struct data{
  30. int x,v;
  31. bool operator < (const data &lhs) const {
  32. return this->v < lhs.v;
  33. }
  34. }a[MAXX],b[MAXX];
  35. int t[MAXX],f[MAXX];
  36. void Msort(int l,int r) {
  37. if(l == r) return;
  38. int m = (l+r) >> 1;
  39. Msort(l,m);Msort(m+1,r);
  40. int i = l,j = m+1,top = 0;
  41. while(i <= m && j <= r) {
  42. if(f[i] < f[j]) t[++top] = f[i++];
  43. else t[++top] = f[j++],ans = (ans+m-i+1)%mod;
  44. }
  45. while(i <= m) t[++top] = f[i++];
  46. while(j <= r) t[++top] = f[j++];
  47. memcpy(f+l,t+1,sizeof(int)*top);
  48. }
  49. signed main(void) {
  50. freopen("EOADtulad.in","r",stdin);
  51. freopen("EOADtulad.out","w",stdout);
  52. read(n);
  53. Rep(i,1,n) read(a[i].v),a[i].x = i;
  54. Rep(i,1,n) read(b[i].v),b[i].x = i;
  55. sort(a+1,a+n+1);
  56. sort(b+1,b+n+1);
  57. Rep(i,1,n)
  58. f[b[i].x] = a[i].x;
  59. Msort(1,n);
  60. printf("%d",ans);
  61. fclose(stdin);fclose(stdout);
  62. return 0;
  63. }