对于每个数$a_i$,易得它对答案的贡献为 它左边比它小的数的个数$\times$它右边比它大的数的个数。

可以离散化后再处理也可以使用动态开点的线段树。

我使用了动态开点的线段树,只有需要用到这个节点的时候才新建这个节点,这里我是在进行修改的时候新建的。

时间复杂度$O(n\log \rm MAX\_INT)$,空间复杂度$O(n\log \rm MAX\_INT)$(常数真的很大)

以下是代码,不清楚的地方已标出。

 #include <bits/stdc++.h>

 using namespace std;

 typedef long long ll;

 const ll MAXN = 3e4 + , inf = 0x7fffffffLL + 5LL;

 ll ans = , kans[MAXN], a[MAXN], n;

 struct node{

     ll data;
node *lc, *rc; void pushup() {
data = ;
if(lc) data += lc->data;
if(rc) data += rc->data;
} node() {
data = ;
lc = rc = NULL;
} } *st1 = new node, *st2 = new node; //建立两棵线段树 ll query(node *&cur, ll l, ll r, ll ql, ll qr) {
if(!cur) return ; //防止访问无效内存
if(ql <= l && r <= qr) {
return cur->data;
}
ll mid = (l + r) >> , ans = ;
if(ql <= mid) ans += query(cur->lc, l, mid, ql, qr);
if(qr > mid) ans += query(cur->rc, mid + , r, ql, qr);
return ans;
} void modify(node *&cur, ll l, ll r, ll q, ll k) {
if(!cur) cur = new node; //新建节点
if(l == r) cur->data += k;
else {
ll mid = (l + r) >> ;
if(q <= mid) modify(cur->lc, l, mid, q, k);
else modify(cur->rc, mid + , r, q, k);
cur->pushup();
}
} void solve() {
for(ll i = ; i < n; i++) {
kans[i] = query(st1, , inf, , a[i] - ); //得到它左边比它小的数的个数
modify(st1, , inf, a[i], );
}
for(ll i = n - ; i >= ; i--) {
kans[i] *= query(st2, , inf, a[i] + , inf); //得到右边比它大的数的个数
modify(st2, , inf, a[i], );
}
} int main () {
cin >> n;
for(ll i = ; i < n; i++) cin >> a[i], a[i]+=; //为了防止访问到0,这里直接加上2,是不改变结果的
solve();
for(ll i = ; i < n; i++) ans += kans[i];
cout << ans << endl;
return ;
}

【Luogu P1637】 三元上升子序列的更多相关文章

  1. 【luogu P1637 三元上升子序列】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1637 BIT + 离散化. 读题得数据规模需离散化.BIT开不到longint这么大的数组. 对于题目所求的 ...

  2. Luogu P1637 三元上升子序列【权值线段树】By cellur925

    题目传送门 emmm..不开结构体的线段树真香! 首先我们知道"三元上升子序列"的个数就是对于序列中的每个数,**它左边比他小的数*它右边比他大的数**.但是如何快速求出这两个数? ...

  3. 洛谷P1637 三元上升子序列

    P1637 三元上升子序列 48通过 225提交 题目提供者该用户不存在 标签云端 难度提高+/省选- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 为什么超时啊 a的数据比较 ...

  4. P1637 三元上升子序列

    thair 好,这个naive的东西因为只有三元,很好求解.只要把每个数之前小的L[i]与之后大的R[i]求一下即可. 求两次逆序对即可.那么答案便是∑(L[i]*R[i]); 对于更高元的,胡雨菲写 ...

  5. 洛谷p1637 三元上升子序列(树状数组

    题目描述 Erwin最近对一种叫"thair"的东西巨感兴趣... 在含有n个整数的序列a1,a2......an中, 三个数被称作"thair"当且仅当i&l ...

  6. 【洛谷P1637】三元上升子序列

    题目大意:给定一个长度为 N 的序列,求有多少个三元组满足 \(i<j<k,a_i<a_j<a_k\). 题解:这是一类二维偏序问题,与逆序对问题类似. 对于序列中每个点来说, ...

  7. [LeetCode] Increasing Triplet Subsequence 递增的三元子序列

    Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ...

  8. Luogu 3402 最长公共子序列(二分,最长递增子序列)

    Luogu 3402 最长公共子序列(二分,最长递增子序列) Description 经过长时间的摸索和练习,DJL终于学会了怎么求LCS.Johann感觉DJL孺子可教,就给他布置了一个课后作业: ...

  9. (luogu P1410)子序列 [TPLY]

    子序列 题目链接:https://www.luogu.org/problemnew/show/P1410 吐槽: 这道题做得我心累 本来想好好练一练dp 刷刷水题来练练手感 于是乎打开了(普及+/提高 ...

随机推荐

  1. [转]latex符号

    常用数学符号的 LaTeX 表示方法 (以下内容主要摘自“一份不太简短的 LATEX2e 介绍”) 1.指数和下标可以用^和_后加相应字符来实现.比如: 2.平方根(square root)的输入命令 ...

  2. Unity3D Shader性能排行

    整体上,性能由高到低: Unlit,仅为纹理,光线不产生效果 VertexLit Diffuse 漫反射 Normal Mapped 法线贴图 Specular 高光 Normal Mapped Sp ...

  3. php编译安装过程中遇到问题

    编译安装PHP时遇到的问题 问题1: configure: error: xml2-config not found. Please check your libxml2 installation. ...

  4. static int a

    static int a只被本文件可见,外部文件不可见;而int a如果在外部文件作以下声明: extern int a,那么它在声明的文件里也是可见的 详见:http://bbs.csdn.net/ ...

  5. ArcGIS10.1的安装问题

    注:必须用3个带0的文件夹里面的东西安装 1.先装Pre-release_license_manager   ,然后停掉. 2.然后安装0Desktop/ArcGIS_Desktop, 3.打开0Ke ...

  6. mybat-大文件的存取

    在mybatis中存储大文件可以直接存 取的时候取出来的是二进制 1.在实体类中添加大文本和图片 package com.java1234.model; public class Student { ...

  7. vue系列(一)子组件和父组件

    父组件传递数据到子组件props 父组件 <template> <div class="main"> <div class="top&quo ...

  8. 2017.12.25 Java中面向对象思想的深刻理解

    今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 * A: 面向过程与面 ...

  9. python_14_sys_mod

    import sys #1 print(sys.path)#打印环境变量 #2 print(sys.argv)#打印相对路径 print(sys.argv[2])#在cmd命令窗口运行本文件

  10. WebViewJavaScriptBridge的原理解析

    理解WebViewJavaScriptBridge原理 前提条件都是需要bridge在OC实例化,然后二者的互调才可以进行下去 _bridge = [WebViewJavascriptBridge b ...