链接:https://ac.nowcoder.com/acm/contest/358/D

题意:

出题人的妹子送了出题人一个手环,这个手环上有 n 个珠子,每个珠子上有一个数。
有一天,出题人和妹子分手了,想把这个手环从两个珠子间切开,并按顺时针顺序展开成一条链。

可以发现,这条链一共有 n 种可能性。求这 n 种可能性的逆序对数之积模 1000000007。

思路:

离散化加树状数组,先求出第一种情况的逆序对,之后每次将最后一个数减去比他大的,加上比他小的就是下一个序列的逆序对数。

比赛想到思路了,但是败给了数组,忘记减法中间加上MOD了。

代码:

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200000+10;
const int MOD = 1e9+7;
int data[MAXN];
int a[MAXN];
int c[MAXN];
int n; struct Node
{
int v;
int w;
bool operator < (const Node & that) const{
return this->v < that.v;
}
};
Node node[MAXN]; int lowbit(int x)
{
return x&-x;
} void update(int pos,int v)
{
while (pos <= n)
{
c[pos] += v;
pos += lowbit(pos);
}
} int getsum(int pos)
{
int sum = 0;
while (pos > 0)
{
sum += c[pos];
pos -= lowbit(pos);
}
return sum;
} int main()
{
cin >> n;
{
for (int i = 1; i <= n; i++)
cin >> data[i];
for (int i = 1; i <= n; i++)
{
node[i].v = data[i];
node[i].w = i;
} sort(node + 1, node + n + 1); //memset(a,0, sizeof(a));
memset(c, 0, sizeof(c));
int pos = 1;
a[node[1].w] = 1;
for (int i = 2; i <= n; i++)
{
if (node[i].v == node[i - 1].v)//当值相同时,对应的位置为首个位置
a[node[i].w] = pos;
else
a[node[i].w] = ++pos;
} long long ans = 0;
long long re = 1;
for (int i = 1; i <= n; i++)
{
update(a[i], 1);
ans = ans % MOD;
ans += i - getsum(a[i]);
}
re = re * ans % MOD; for (int i = n; i > 1; i--)
{
long long now = getsum(a[i] - 1);
long long sub = n - now - (getsum(a[i]) - getsum(a[i] - 1));
ans = ans + now - sub;
ans = (ans%MOD + MOD)%MOD;
re = re * ans % MOD;
}
re = re % MOD;
cout << re << endl;
} return 0;
}

  

D.出题人的手环的更多相关文章

  1. 牛客练习赛38 D 出题人的手环

    链接 [https://ac.nowcoder.com/acm/contest/358/D] 题意 链接:https://ac.nowcoder.com/acm/contest/358/D 来源:牛客 ...

  2. 牛客练习赛38 D 题 出题人的手环 (离散化+树状数组求逆序对+前缀和)

    链接:https://ac.nowcoder.com/acm/contest/358/D来源:牛客网 出题人的手环 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他 ...

  3. 出题人的手环(牛客练习赛38D 离散化+树状数组)

    题目链接(https://ac.nowcoder.com/acm/contest/358/D) 题目描述 出题人的妹子送了出题人一个手环,这个手环上有 n 个珠子,每个珠子上有一个数. 有一天,出题人 ...

  4. 出题人的女装(牛客练习赛38题B) (概率+分式运算)

    链接:https://ac.nowcoder.com/acm/contest/358/B来源:牛客网 出题人的女装 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他 ...

  5. 出题人的RP值(牛客练习赛38--A题)(排序)

    链接:https://ac.nowcoder.com/acm/contest/358/A来源:牛客网 题目描述 众所周知,每个人都有自己的rp值(是个非负实数),膜别人可以从别人身上吸取rp值. 然而 ...

  6. 洛谷 P3299 [SDOI2013]保护出题人 解题报告

    P3299 [SDOI2013]保护出题人 题目描述 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企 ...

  7. 【BZOJ3203】[Sdoi2013]保护出题人 二分+凸包

    [BZOJ3203][Sdoi2013]保护出题人 Description Input 第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离.接下来n行每行两个空格隔开的正整数,第i + ...

  8. 【BZOJ3203】保护出题人(动态规划,斜率优化)

    [BZOJ3203]保护出题人(动态规划,斜率优化) 题面 BZOJ 洛谷 题解 在最优情况下,肯定是存在某只僵尸在到达重点的那一瞬间将其打死 我们现在知道了每只僵尸到达终点的时间,因为僵尸要依次打死 ...

  9. 一道超级坑爹的水题(ACdream oj 无耻的出题人)

     A - 无耻的出题人 Time Limit: 2000/1000 MS (Java/Others)      Memory Limit: 65536/32768 KB (Java/Others) ...

随机推荐

  1. 动态负载均衡(Nginx+Consul+UpSync)

    Http动态负载均衡 什么是动态负载均衡 传统的负载均衡,如果Upstream参数发生变化,每次都需要重新加载nginx.conf文件, 因此扩展性不是很高,所以我们可以采用动态负载均衡,实现Upst ...

  2. BluetoothLE-Multi-Library 一个能够连接多台蓝牙设备的库,它可以作为client端,也可以为server端。支持主机/从机,外围设备连接。

    github地址:https://github.com/qindachang/BluetoothLE-Multi-Library BluetoothLE-Multi-Library 一个能够连接多台蓝 ...

  3. Java NIO(一) 初步理解NIO

    Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式. 为什么要使用 NIO? NIO ...

  4. python学习笔记:第四天( 字符串)

    Python3 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字 ...

  5. apeche配置虚拟主机

    一.开启虚拟主机: 在apache的配置文件httpd.conf中将Include conf/extra/httpd-vhosts.conf这行打开. 二.配置虚拟主机: 在extra/httpd-v ...

  6. QQ通信原理

    转载自http://blog.csdn.net/li_xiao_ming/article/details/8106857 下面有4个基本的问答: 问题一:为什么只要可以连上互联网的计算机都可以用QQ相 ...

  7. 如何配置xmanager

      步骤1:编辑/etc/X11/xdm/Xaccess,将下面的行:  #* # any host can get a login window 改为: * # any host can get a ...

  8. CodeForces - 840D:(主席树求出现区间出现次数大于某值的最小数)

    Once, Leha found in the left pocket an array consisting of n integers, and in the right pocket q que ...

  9. Android开发:显式/隐式Intent

    显式跳转 是在已知包名和类名的情况下常用的跳转方法: Intent mIntent = new Intent(); mIntent.setClassName("com.android.set ...

  10. JavaScript-Tool:jquery.zsign(电子签章)-un

    ylbtech-JavaScript-Tool:jquery.zsign(电子签章) 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作 ...