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

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



【完整代码】

//n最大5万
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)
#define ref(x) scanf("%lf",&x) typedef pair<int, int> pii;
typedef pair<LL, LL> pll; const int dx[9] = { 0,1,-1,0,0,-1,-1,1,1 };
const int dy[9] = { 0,0,0,-1,1,-1,1,-1,1 };
const double pi = acos(-1.0);
const int N = 5e4+100;
const LL mod = 1991; struct abc
{
int x, id;
}; int n;
LL sum[N << 2];
LL ni = 0,temp = 1;
abc a[N]; bool cmp1(abc a, abc b)
{
return a.x > b.x;
} void in()
{
rei(n);
rep1(i, 1, n)
rei(a[i].x), a[i].id = i;
} void up_data(int pos,int l, int r, int rt)
{
if (l == r)
{
sum[rt]++;
return;
}
int m = (l + r) >> 1;
if (pos <= m)
up_data(pos, lson);
else
up_data(pos, rson);
sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];
} LL query(int L, int R, int l, int r, int rt)
{
if (L > R)
return 0;
if (L <= l && r <= R)
return sum[rt];
int m = (l + r) >> 1;
LL temp1 = 0, temp2 = 0;
if (L <= m)
temp1 += query(L, R, lson);
if (m < R)
temp2 += query(L, R, rson);
return temp1 + temp2;
} void get_ans()
{
rep1(i, 1, n)
{
int l = i,r = i;
while (r + 1 <= n && a[r + 1].x == a[l].x) r++;
rep1(j, l, r)
ni += query(1, a[j].id - 1, 1, n, 1);
rep1(j,l,r)
up_data(a[j].id, 1, n, 1);
i = r;
}
} void ksm(LL x)
{
if (!x) return;
ksm(x >> 1);
temp = (temp*temp) % mod;
if (x & 1)
temp = (temp * 2) % mod;
} void o()
{
printf("%I64d\n", temp);
} int main()
{
//freopen("F:\\rush.txt", "r", stdin);
in();
sort(a + 1, a + 1 + n, cmp1);
get_ans();
ksm(ni);
o();
//printf("\n%.2lf sec \n", (double)clock() / CLOCKS_PER_SEC);
return 0;
}

【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. 初学者路径规划 | 人生苦短我用Python

    纵观编程趋势 人生苦短,我用Python,比起C语言.C#.C++和JAVA这些编程语言相对容易很多.Python非常适合用来入门.有人预言,Python会成为继C++和Java之后的第三个主流编程语 ...

  2. 【hdu 6000】Wash

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 因为每件衣服都是没有区别的. 只有洗衣机不同会影响洗衣时间. 那么我们把每台洗衣机洗衣的时间一开始都加入到队列中. 比如{2,3,6 ...

  3. 硬件——STM32 , 录音,wav

    详细的wav头文件解析,有例子:http://www.cnblogs.com/chulin/p/8918957.html 关于录音程序的编写: 我的思路是改写原子的程序,原子的程序需要借助VS1053 ...

  4. python3 pygame 坦克自动移动

    让坦克自动跑起来 这里需要一个坦克的图. 放到与脚本同一目录. 好,我们就让这个坦克自动跑. 下面上代码: # !/usr/bin/env python # -*- coding:utf-8 -*- ...

  5. 在Java中,return null 是否安全, 为什么?

    Java代码中return value 为null 是不是在任何情况下都可以,为什么不会throw NullPointerException? Java语言层面:null值自身是不会引起任何问题的.它 ...

  6. 判断Bigdecimal类型是否等于0的方法

    1.我之前用来判断Bigdecimal类型是否等于0的方法 b.equals(BigDecimal.ZERO); 用equals方法和BigDecimal.ZERO进行比较. 2.上面方法存在的问题 ...

  7. 支付宝支付返回通知时 notify_url和return_url的选择

    页面跳转同步通知页面特性(return_url特性) 买家在支付成功后会看到一个支付宝交易提示成功的页面,该页面会停留几秒,然后会自动跳转回商户指定的同步通知页面(参数return_url) 该页面中 ...

  8. (嵌入式开发)移植最新uboot

    一:准备移植 1.从下面的官网下载最新的U-boot.用google英文版搜索最新的u-boot源码  ftp://ftp.denx.de/pub/u-boot/ 2.建立sourceinsight工 ...

  9. POJ 2402 Palindrome Numbers(LA 2889) 回文数

    POJ:http://poj.org/problem?id=2402 LA:https://icpcarchive.ecs.baylor.edu/index.php?option=com_online ...

  10. APK瘦身记,怎样实现高达53%的压缩效果

    作者:非戈@阿里移动安全,很多其它技术干货.请訪问阿里聚安全博客 1.我是怎么思考这件事情的 APK是Android系统安装包的文件格式.关于这个话题事实上是一个老生常谈的题目.不论是公司内部.还是外 ...