Super OJ 序列计数
题意:
给出序列 a1,a2,……an(0≤ai≤109),求三元组(ai,aj,ak)(1≤i<j<k≤n)满足 ai<aj>ak 的数量。
分析:
开两个\(BIT\),分别维护前面比它小的和后面比它大的,然后组合计数一下即可
代码:
#include<bits/stdc++.h>
#define lowbit(x) (x & (-x))
#define ll long long
#define N (100000 + 5)
using namespace std;
inline int read() {
	int cnt = 0, f = 1; char c = getchar();
	while (!isdigit(c)) {if (c == '-') f = -f; c = getchar();}
	while (isdigit(c)) {cnt = (cnt << 3) + (cnt << 1) + c - '0'; c = getchar();}
	return cnt * f;
}
int n, q, a[N], b[N << 1];
ll ans;
void pre() {
	sort(b + 1, b + n + 1);
	q = unique(b + 1, b + n + 1) - b - 1;
	for (register int i = 1; i <= n; ++i) a[i] = lower_bound(b + 1, b + q + 1, a[i]) - b;
}
struct node {
	int BIT[N];
	void insert (int x) {for (; x <= n; x += lowbit(x)) ++BIT[x];}
	void Delete (int x) {for (; x <= n; x += lowbit(x)) --BIT[x];}
	ll query(int x) {ll ans = 0; for (; x; x -= lowbit(x)) ans += BIT[x]; return ans;}
}BIT1, BIT2;
int main() {
	n = read();
	for (register int i = 1; i <= n; ++i) a[i] = b[i] = read();
	pre();
	for (register int i = 1; i <= n; ++i) BIT2.insert(a[i]);
	BIT1.insert(a[1]);
	for (register int i = 2; i <= n; ++i) {
		BIT1.insert(a[i]);
		BIT2.Delete(a[i - 1]);
		ans += (BIT1.query(a[i] - 1) * (BIT2.query(a[i] - 1)));
//		cout<<BIT1.query(a[i] - 1)<< " " << BIT2.query(a[i])<<"\n";
	}
	printf("%lld", ans);
	return 0;
}
Super OJ 序列计数的更多相关文章
- [Sdoi2017]序列计数 [矩阵快速幂]
		[Sdoi2017]序列计数 题意:长为\(n \le 10^9\)由不超过\(m \le 2 \cdot 10^7\)的正整数构成的和为\(t\le 100\)的倍数且至少有一个质数的序列个数 总- ... 
- BZOJ_4818_[Sdoi2017]序列计数_矩阵乘法
		BZOJ_4818_[Sdoi2017]序列计数_矩阵乘法 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望 ... 
- HDU 6348 序列计数 (树状数组 + DP)
		序列计数 Time Limit: 4500/4000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Subm ... 
- luogu3702-[SDOI2017]序列计数
		Description Alice想要得到一个长度为nn的序列,序列中的数都是不超过mm的正整数,而且这nn个数的和是pp的倍数. Alice还希望,这nn个数中,至少有一个数是质数. Alice想知 ... 
- BZOJ4818 序列计数
		4818: [Sdoi2017]序列计数 Time Limit: 30 Sec Memory Limit: 128 MB Description Alice想要得到一个长度为n的序列,序列中的数都是 ... 
- 【BZOJ 4818】 4818: [Sdoi2017]序列计数 (矩阵乘法、容斥计数)
		4818: [Sdoi2017]序列计数 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 560 Solved: 359 Description Al ... 
- P3702 [SDOI2017]序列计数
		P3702 [SDOI2017]序列计数 链接 分析: 首先可以容斥掉,用总的减去一个质数也没有的. 然后可以dp了,f[i][j]表示到第i个数,和在模p下是j的方案数,矩阵快速幂即可. 另一种方法 ... 
- 【BZOJ4818】[Sdoi2017]序列计数 DP+矩阵乘法
		[BZOJ4818][Sdoi2017]序列计数 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望 ,这n个数 ... 
- BZOJ4818 LOJ2002 SDOI2017 序列计数 【矩阵快速幂优化DP】*
		BZOJ4818 LOJ2002 SDOI2017 序列计数 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数. Alice还希 ... 
随机推荐
- VMware1设备与主机共享网络的问题
			问题的提出: 最近需要用到VMware1设备来配置网络,顺便将VMware1设备与主机进行共享网络,这样master就能直接访问网络了,但是原本以为直接在wlan设备上选择网络共享就行了,但是却没法收 ... 
- 关于使用AWS的centos
			AWS的centos在版本上有些许不同. 当使用6代的时候,默认的登录用户是root 使用7代的系统,默认的登录用户是centos 否则登录不上去 
- 1.Struts2快速入门
			Struts2是一个基于MVC设计模式的Web层框架 Web层框架的特点:前端控制器模式 快速入门 1.下载Struts2的框架包 https://struts.apache.org/ 2.导入jar ... 
- windows10 自动配置切换IP
			办公室与家里的ip网段不一样.每次都要来回修改本地无线WLAN IP段.写了个脚本bat,自动配置WLAN IP,方便切换. 建立 auto-set-ip.bat,保存格式需为ANSI,否则中文会乱码 ... 
- Java 基础 - JDK 和 JRE 有什么区别
			总结 JRE(Java Runtime Environment),就是 Java 运行环境,包括JVM虚拟机(java.exe等)和基本的类库(rt.jar等). JDK (Java Developm ... 
- Batch - call, start, goto 区别
			参考(待整理): 批处理命令——call 和 start 
- Go const 关键字
			Go const 关键字 package main import "fmt" func main() { const LENGTH int = 10 const WIDTH int ... 
- css属性大全(基础篇)
			什么是CSS? CSS全称为Cascading Style Sheets,中文翻译为“层叠样式表”,简称CSS样式表,所以称之为层叠样式表(Cascading Stylesheet)简称CSS.在 ... 
- iOS开发事件分发机制—响应链—手势影响
			1.提纲 什么是iOS的事件分发机制 ? 一个事件UIEvent又是如何响应的? 手势对于响应链有何影响? 2.事件分发机制 2.1.来源 以直接触摸事件为例: 当用户一个手指触摸屏幕是会生成一个UI ... 
- jQuery 引入多个库文件冲突
			index.html <head><meta http-equiv="Content-Type" content="text/html; charset ... 
