[bzoj1145]图腾
如果将关系用一个数字来表示(相等表示不确定),那么题目相当于要计算
$1324-1243-1432$
=$(1323-1423)-(1233-1234)-(1322-1423)$
=$1323+1234-(1322+1233)$
=$1323+1234-1222-(1324+1342)$
先预处理出li表示i左边比i小的数,ri表示i右边比i大的数(线段树即可),然后对于一下每一项分别考虑如何统计:
1.1323,枚举1的位置i,右边有ri种,左边容斥,答案为任意-312-112=$li*(i-1)-li*(li-1)/2-\sum_{j=1}^{i-1}[aj<ai]*j$
2.1234,枚举3的位置i,右边有ri种,左边有$\sum_{j=1}^{i-1}[aj<ai]*lj$种
3.1222,枚举1的位置i,右边有$C_{ri}^{3}$种
4.1324+1342,枚举3的位置i,将整个拆分成4和12,4有ri种,再对1和3的位置关系容斥,即任意-312-321=$\sum_{j=i+1}^{n}[aj<ai]*(aj-1)-c(n-i-ri,2)$
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 #define mod 16777216
5 #define L (k<<1)
6 #define R (L+1)
7 #define mid (l+r>>1)
8 int n,ans,a[N],l[N],r[N],f[N<<2];
9 int c2(int k){
10 return 1LL*k*(k-1)/2%mod;
11 }
12 int c3(int k){
13 return 1LL*k*(k-1)*(k-2)/6%mod;
14 }
15 void update(int k,int l,int r,int x,int y){
16 if (l==r){
17 f[k]=(f[k]+y)%mod;
18 return;
19 }
20 if (x<=mid)update(L,l,mid,x,y);
21 else update(R,mid+1,r,x,y);
22 f[k]=(f[L]+f[R])%mod;
23 }
24 int query(int k,int l,int r,int x,int y){
25 if ((l>y)||(x>r))return 0;
26 if ((x<=l)&&(r<=y))return f[k];
27 return (query(L,l,mid,x,y)+query(R,mid+1,r,x,y))%mod;
28 }
29 int main(){
30 scanf("%d",&n);
31 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
32 for(int i=1;i<=n;i++){
33 update(1,1,n,a[i],1);
34 l[i]=query(1,1,n,1,a[i]-1);
35 r[i]=n-i-(a[i]-l[i]-1);
36 ans=((ans+1LL*r[i]*(l[i]*(i-1LL)-c2(l[i]))-c3(r[i]))%mod+mod)%mod;
37 }
38 memset(f,0,sizeof(f));
39 for(int i=1;i<=n;i++){
40 update(1,1,n,a[i],l[i]-i);
41 ans=(ans+1LL*r[i]*query(1,1,n,1,a[i]-1))%mod;
42 }
43 memset(f,0,sizeof(f));
44 for(int i=n;i;i--){
45 update(1,1,n,a[i],a[i]-1);
46 ans=(ans+1LL*r[i]*(query(1,1,n,1,a[i]-1)-c2(n-i-r[i])+mod))%mod;
47 }
48 printf("%d",ans);
49 }
[bzoj1145]图腾的更多相关文章
- bzoj1145[CTSC2008]图腾
传送门 虽然是远古时期的ctsc,但是果然还是ctsc啊 前置芝士:树状数组 这个题最开始的思路很好想,由于之前写过一个类似处理的题,所以这个题我一开始就想到了思路. 首先,我们可以尝试讲图腾表示为x ...
- bzoj1145
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1145 神题...... 定义f(abcd)为高度排名为abcd的个数,例如闪电的个数为f(13 ...
- HTML5之2D物理引擎 Box2D for javascript Games 系列 第三部分之创建图腾破坏者的关卡
创建图腾破坏者的关卡 现在你有能力创建你的第一个游戏原型,我们将从创建图腾破坏者的级别开始. 为了展示我们所做事情的真实性,我们将流行的Flash游戏图腾破坏者的一关作为 我们模仿的对象.请看下面的截 ...
- 洛谷 P1498 南蛮图腾
题目描述 自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图 ...
- CH4201 楼兰图腾
题意 4201 楼兰图腾 0x40「数据结构进阶」例题 描述 在完成了分配任务之后,西部314来到了楼兰古城的西部.相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀('V'), ...
- 洛咕 P4528 [CTSC2008]图腾
洛咕 P4528 [CTSC2008]图腾 神题orz. 先约定abcd表示\(1\leq A<B<C<D\leq n\),而且\(y_a,y_b,y_c,y_d\)的排名正好是\( ...
- P1498 南蛮图腾
P1498 南蛮图腾 题目描述 自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果(看Hint),在得到了酋长的传授后,孔明掌握 ...
- TYVJ1432 楼兰图腾
Description 平面上有 N(N≤[10]^5 ) 个点,每个点的横.纵坐标的范围都是 1~N,任意两个点的横.纵坐标都不相同.若三个点 (x_1,y_1),(x_2,y_2),(x_3,y_ ...
- 洛谷——P1498 南蛮图腾
https://www.luogu.org/problem/show?pid=1498 题目描述 自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往 ...
随机推荐
- 详解build-gradle文件
目录 gradle 两个build.gradle文件 最外层目录下的build.gradle文件 jcenter dependencies闭包 app目录下的build.gradle文件 com.an ...
- 用最简单的方式理解 IoC 控制反转
思想引入 假设一个系统原先只设定有一个默认的方法去完成业务,这里举例这个原先设定开发的是 UserDaoImpl(可能有些牵强,但是不影响我们对逻辑的理解)这样一个业务. 后来有一天,需求变了,业务流 ...
- 2021年1月-第02阶段-前端基础-HTML+CSS进阶-VS Code 软件
软件安装 VSCode软件 能够安装 VS Code 能够熟练使用 VS Code 软件 能够安装 VS Code 最常用的插件 1. VS Code简介 1.1 VS Code 简介 Visual ...
- Windows 安装 gcc
Windows 安装 gcc ① 官网下载 GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF ...
- Django开发个人博客入门学习经验贴
[写在前面] 入门学习搭建个人博客系统首先还是参考大佬们的经验,记得刚入手Django的时候,一篇博客大佬说过一句话,做技术的不要一开始就扎头于细节中,先把握整体框架,了解这个对象之后再去了解细节,进 ...
- Mybatis初始化机制
对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置 ...
- css3鼠标悬停图片边框线条动画特效
css3鼠标经过内容区时,边框线条特效效果制作. html: <div class="strength grWidth hidden"> <div class ...
- 如果你还不知道Apache Zookeeper?你凭什么拿大厂Offer!!
很多同学或多或少都用到了Zookeeper,并知道它能实现两个功能 配置中心,实现表分片规则的统一配置管理 注册中心,实现sharding-proxy节点的服务地址注册 那么Zookeeper到底是什 ...
- JDK 8中重要的函数式接口(必知必会)
JDK 8 提供的重要函数式接口: Consumer (消费者) 功能:接收一个对象,返回void. 定义:void accept(T t) 默认方法:Consumer andThen(Consume ...
- 第0次 Beta Scrum Meeting
本次会议为Beta阶段第0次Scrum Meeting会议 会议概要 会议时间:2021年5月27日 会议地点:「腾讯会议」线上进行 会议时长:1小时 会议内容简介:本次会议为Beta阶段启程会议,主 ...