Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

生活中,大多数事物都是有序的,因为顺序的美是最令人陶醉的。所以现在RCDH看了不顺的东西就头痛。所以他想让世界变成有序,

可是他只是一个无名小辈,所以只好对数字序列下手。据他所知序列的混乱程度是由“逆序对”的个数决定,公式是Q=2^n,其中

Q是指混乱程度,n是指这个序列“逆序对”的个数。逆序对是这样定义的:假设序列中第I个数是ai,若存在Iaj,则

就为一个逆序对。你的任务是给定一个序列,计算其混乱程度Q。这个数可能会比较大,你只需输出Q mod 1991 的结果。

【输入格式】

第一行,整数n,表示序列中有n个数。

第二行,有n个数。

【输出格式】

仅一行,Q mod 1991 的值。

样例注释:样例中共有2个逆序对,故Q=2^2=4。所以,Q mod 1991=4。

【数据规模】

对于30%的数据 2= 对于100%的数据 2= 数列中的每个数不超过10000000的正整数。

Sample Input

4

1 3 4 2

Sample Output

4

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t059

【题意】

【题解】



线段树求逆序对的方法:http://blog.csdn.net/harlow_cheng/article/details/52453361

这里有会有重复数字,求逆序对的时候注意先递增相同大小的数字的答案,再更新线段树



【完整代码】

  1. //n最大5万
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cmath>
  5. using namespace std;
  6. #define lson l,m,rt<<1
  7. #define rson m+1,r,rt<<1|1
  8. #define LL long long
  9. #define rep1(i,a,b) for (int i = a;i <= b;i++)
  10. #define rep2(i,a,b) for (int i = a;i >= b;i--)
  11. #define mp make_pair
  12. #define pb push_back
  13. #define fi first
  14. #define se second
  15. #define rei(x) scanf("%d",&x)
  16. #define rel(x) scanf("%lld",&x)
  17. #define ref(x) scanf("%lf",&x)
  18. typedef pair<int, int> pii;
  19. typedef pair<LL, LL> pll;
  20. const int dx[9] = { 0,1,-1,0,0,-1,-1,1,1 };
  21. const int dy[9] = { 0,0,0,-1,1,-1,1,-1,1 };
  22. const double pi = acos(-1.0);
  23. const int N = 5e4+100;
  24. const LL mod = 1991;
  25. struct abc
  26. {
  27. int x, id;
  28. };
  29. int n;
  30. LL sum[N << 2];
  31. LL ni = 0,temp = 1;
  32. abc a[N];
  33. bool cmp1(abc a, abc b)
  34. {
  35. return a.x > b.x;
  36. }
  37. void in()
  38. {
  39. rei(n);
  40. rep1(i, 1, n)
  41. rei(a[i].x), a[i].id = i;
  42. }
  43. void up_data(int pos,int l, int r, int rt)
  44. {
  45. if (l == r)
  46. {
  47. sum[rt]++;
  48. return;
  49. }
  50. int m = (l + r) >> 1;
  51. if (pos <= m)
  52. up_data(pos, lson);
  53. else
  54. up_data(pos, rson);
  55. sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];
  56. }
  57. LL query(int L, int R, int l, int r, int rt)
  58. {
  59. if (L > R)
  60. return 0;
  61. if (L <= l && r <= R)
  62. return sum[rt];
  63. int m = (l + r) >> 1;
  64. LL temp1 = 0, temp2 = 0;
  65. if (L <= m)
  66. temp1 += query(L, R, lson);
  67. if (m < R)
  68. temp2 += query(L, R, rson);
  69. return temp1 + temp2;
  70. }
  71. void get_ans()
  72. {
  73. rep1(i, 1, n)
  74. {
  75. int l = i,r = i;
  76. while (r + 1 <= n && a[r + 1].x == a[l].x) r++;
  77. rep1(j, l, r)
  78. ni += query(1, a[j].id - 1, 1, n, 1);
  79. rep1(j,l,r)
  80. up_data(a[j].id, 1, n, 1);
  81. i = r;
  82. }
  83. }
  84. void ksm(LL x)
  85. {
  86. if (!x) return;
  87. ksm(x >> 1);
  88. temp = (temp*temp) % mod;
  89. if (x & 1)
  90. temp = (temp * 2) % mod;
  91. }
  92. void o()
  93. {
  94. printf("%I64d\n", temp);
  95. }
  96. int main()
  97. {
  98. //freopen("F:\\rush.txt", "r", stdin);
  99. in();
  100. sort(a + 1, a + 1 + n, cmp1);
  101. get_ans();
  102. ksm(ni);
  103. o();
  104. //printf("\n%.2lf sec \n", (double)clock() / CLOCKS_PER_SEC);
  105. return 0;
  106. }

【t059】序列的更多相关文章

  1. 【夯实PHP基础】UML序列图总结

    原文地址 序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色 ...

  2. Windows10-UWP中设备序列显示不同XAML的三种方式[3]

    阅读目录: 概述 DeviceFamily-Type文件夹 DeviceFamily-Type扩展 InitializeComponent重载 结论 概述 Windows10-UWP(Universa ...

  3. 软件工程里的UML序列图的概念和总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 软件工程的一般开发过程:愿景分析.业务建模,需求分析,健壮性设计,关键设计,最终设计,实现…… 时序图也叫序列图(交互图),属于软件 ...

  4. python序列,字典备忘

    初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...

  5. BZOJ 1251: 序列终结者 [splay]

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3778  Solved: 1583[Submit][Status][Discu ...

  6. 最长不下降序列nlogn算法

    显然n方算法在比赛中是没有什么用的(不会这么容易就过的),所以nlogn的算法尤为重要. 分析: 开2个数组,一个a记原数,f[k]表示长度为f的不下降子序列末尾元素的最小值,tot表示当前已知的最长 ...

  7. [LeetCode] Sequence Reconstruction 序列重建

    Check whether the original sequence org can be uniquely reconstructed from the sequences in seqs. Th ...

  8. [LeetCode] Binary Tree Longest Consecutive Sequence 二叉树最长连续序列

    Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...

  9. [LeetCode] Repeated DNA Sequences 求重复的DNA序列

    All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...

随机推荐

  1. 算法中的优化问题(optimization problem)

    和多数算法不同的是,有些问题的答案不只一个,而是需要在多个答案中,按照一定标准选出"最佳"答案,这类问题就统称为"优化问题"(optimization prob ...

  2. python获取序列中最大值

    test =[ [1, 2, 3], [4, 5, 6], [7, 8, 9]]   #这个就可以看做是二维数组了,直接创建print(test)print(test[:][1])           ...

  3. 洛谷—— P1765 手机_NOI导刊2010普及(10)

    https://www.luogu.org/problem/show?pid=1765#sub 题目描述 一般的手机的键盘是这样的: 1 2 abc 3 def 4 ghi 5 jkl 6 mno 7 ...

  4. BestCoder Round #11 (Div. 2) 前三题题解

    题目链接: huangjing hdu5054 Alice and Bob 思路: 就是(x,y)在两个參考系中的表示演全然一样.那么仅仅可能在这个矩形的中点.. 题目: Alice and Bob ...

  5. css3-12 transform:scale(1.2,1.2)实现移入元素变大特效

    css3-12 transform:scale(1.2,1.2)实现移入元素变大特效 一.总结 一句话总结:transform:scale(1.2,1.2)鼠标移入的时候变大一点点,超出边框的部分隐藏 ...

  6. 结合Wireshark捕获分组深入理解TCP/IP协议栈之DNS协议

    摘要:     本文简单介绍了DNS协议理论知识,给出URL解析步骤,详细讲述了DNS报文各个字段含义,并从Wireshark俘获分组中选取DNS相关报文进行分析. 一.概述 1.1 DNS      ...

  7. Unity(IOC)学习笔记

    原文:Unity(IOC)学习笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/79432 ...

  8. spring mvc controller间跳转 重定向 传参(转)

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  9. 从0開始学习 GitHub 系列之「07.GitHub 常见的几种操作」

    之前写了一个 GitHub 系列,反响非常不错,突然发现居然还落下点东西没写,前段时间 GitHub 也改版了,借此机会补充下. 我们都说开源社区最大的魅力是人人多能够參与进去,发挥众人的力量,让一个 ...

  10. windows server 2012 AD 活动目录部署加入域并创建域用户(寻找视频课程)(计算机加入域其实是本计算机的管理员账号(本机名)加入域,关联账号即可在已经加入域的计算机上面登录)

    windows server 2012 AD 活动目录部署加入域并创建域用户(寻找视频课程)(计算机加入域其实是本计算机的管理员账号(本机名)加入域,关联账号即可在已经加入域的计算机上面登录) 一.总 ...