对于每个数$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. 一位学长的学习建议(java方向)

    1.前台总得有个拿的出手的页面能力吧,ajax,jquery不说精通但是至少能看懂,能根据业务需求来改吧. 2.数据库方面至少得玩过mysql,DB2,Oracle中的两个以上吧.hibernate或 ...

  2. mybatis 异常处理:Invalid bound statement (not found)

    mybatis 的使用过程中提示错误: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): ...

  3. cms-帖子内容实现2

    package com.open1111.controller.admin; import java.io.File;import java.util.Date;import java.util.Ha ...

  4. HDU5200 数据离线处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5200 ,数据离线处理. 这是BestCoder Round #36的C题,比赛时自己用线段树做,姿势不 ...

  5. 【转载】LCT题单

    本篇博客的题单转载自FlashHu大佬的博客:LCT总结--应用篇(附题单)(LCT). 关于\(LCT\)可以查看这篇博客:\(LCT\)入门. 这里面有些题解的链接是空链接,尚未补全. 维护链信息 ...

  6. 从用户访问网站流程开始,细说web网络基础

    1.用户访问网站流程框架 2.dns解析原理 3.tcp/ip三次握手过程原理,11种连接状态 4.tcp/ip四次挥手过程原理,11种连接状态 5.http协议原理(www服务的请求过程)请求细节, ...

  7. wu2198:难得的波段抄底机会

    很好的波段抄底机会 个人浅见看,目前染料股跌出的机会明显,养殖股波段机会明显,芯片.半导体.集成电路.北导.软件.国产操作系统等科技股短线机会不错.另外,大盘指数2856/2806区域的波段操作机会不 ...

  8. 【Python】bytes和hex字符串之间的相互转换。

    反复在几个环境上折腾码流的拼装解析和可读化打印,总是遇到hex字符串和bytes之间的转换,记录在这里吧. 1. 在Python2.7.x上(更老的环境真心折腾不起),hex字符串和bytes之间的转 ...

  9. 解决mysql8小时无连接自动断掉机制

    windows下打开my.ini,增加: interactive_timeout=28800000 wait_timeout=28800000 MySQL是一个小型关系型数据库管理系统,由于MySQL ...

  10. 用Java实现excel转txt

    import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOExcepti ...