题目链接:https://www.luogu.org/problemnew/show/P1637

BIT + 离散化。

读题得数据规模需离散化。BIT开不到longint这么大的数组。

对于题目所求的三元上升子序列,我们可以通过枚举1~n作为中间数,记录左边比他小的个数L[i],右边比他大的个数R[i],那么对于第i个中间数就有L[i]*R[i]个子序列。

L,R可以通过树状数组求得。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 3e4 + 10;
int n, m, A[maxn], B[maxn], L[maxn], R[maxn];
class BIT{
public:
int tree[maxn];
void update(int pos, int val)
{
while(pos <= n)
{
tree[pos] += val;
pos += lowbit(pos);
}
}
int query(int pos)
{
int res = 0;
while(pos)
{
res += tree[pos];
pos -= lowbit(pos);
}
return res;
}
private:
int lowbit(int x)
{
return x & -x;
}
}T[2];
int Search(int x)
{
return lower_bound(B + 1, B + 1 + m, x) - B;
}
int main()
{
cin>>n;
for(int i = 1; i <= n; i++)
{
cin>>A[i];
B[i] = A[i];
}
sort(B + 1, B + 1 + n);
m = unique(B + 1, B + 1 + n) - B - 1;
for(int i = 1; i <= n; i++)
A[i] = Search(A[i]);
for(int i = 1; i <= n; i++)
{
T[0].update(A[i], 1);
L[i] = T[0].query(A[i] - 1);
}
for(int i = n; i >= 1; i--)
{
T[1].update(A[i], 1);
R[i] = n - i - T[1].query(A[i]) + 1;
}
long long ans = 0;
for(int i = 2; i < n; i++) ans += L[i] * R[i];
cout<<ans;
return 0;
}

附:

离散化模板:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e4 + 10;
int n, m, A[maxn], B[maxn];
int Search(int x)
{
return lower_bound(B + 1, B + 1 + m, x) - B;
}
int main()
{
cin>>n;
for(int i = 1; i <= n; i++)
{
cin>>A[i];
B[i] = A[i];
}
sort(B + 1, B + 1 + n);
m = unique(B + 1, B + 1 + n) - B - 1;
for(int i = 1; i <= n; i++)
A[i] = Search(A[i]);
for(int i = 1; i <= n; i++) cout<<A[i];
}

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

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

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

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

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

  3. P1637 三元上升子序列

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

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

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

  5. luogu P1126 机器人搬重物 题解

    luogu P1126 机器人搬重物 题解 题目描述 机器人移动学会(\(RMI\))现在正尝试用机器人搬运物品.机器人的形状是一个直径\(1.6\)米的球.在试验阶段,机器人被用于在一个储藏室中搬运 ...

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

    对于每个数$a_i$,易得它对答案的贡献为 它左边比它小的数的个数$\times$它右边比它大的数的个数. 可以离散化后再处理也可以使用动态开点的线段树. 我使用了动态开点的线段树,只有需要用到这个节 ...

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

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

  8. BZOJ5157 & 洛谷3970:[TJOI2014]上升子序列——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5157 https://www.luogu.org/problemnew/show/P3970 给定 ...

  9. 【luogu P2491 [SDOI2011]消防】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2491 题外话: OI一共只有三种题--会的题,不会的题,二分题. 题解: step 1 求树的直径,把树的直 ...

随机推荐

  1. iOS通过SocketRocket实现websocket的即时聊天

    之前公司的即时聊天用的是常轮循,一直都觉得很不科学,最近后台说配置好了socket服务器,我高兴地准备用asyncsocket,但是告诉我要用websocket,基于HTML5的,HTML5中提出了一 ...

  2. Mybatis插件Plugin

    Mybatis开源Plugin中最熟知的pagehelper,重点made in China 很多人开始用pagehelper时候,肯定很纳闷,以mysql为例,明明没有加limit语句,为什么打印出 ...

  3. Apple开发者账号更改公司名称

    对于大多数的开发者而言,可能很少遇见要修改账户的公司名称的问题,本来公司之前是这个名称,但是后来改名为另外的名称,这样的话在Apple开发者账号上的公司名称再用就不好了,所以就需要到Apple dev ...

  4. centos禁止ping

    1.修改配置文件/etc/sysctl.conf 在这个文件的最后添加一行: net.ipv4.icmp_echo_ignore_all=1 (0 代表允许 1 代表禁止) 2.执行sysctl -p ...

  5. 华东交通大学2017年ACM“双基”程序设计竞赛 1008

    Problem Description 长度为 n 的序列,把它划分成两段非空的子序列,定义权值为:两段子序列的最大值的差的绝对值.求可能的最大的权值.数据范围:2 <= n <= 10^ ...

  6. beeline连接hive

    beeline -u jdbc:hive2://192.168.1.77:10000 zeppelin default jdbc: jdbc:hive2://nn01.ooccpp.com:2181/ ...

  7. C# 枚举类型 enum (一)

    1.枚举使用enum关键字来声明,与类同级.枚举可以和类并列也可以 写在类里面,不能写在方法里. 2.枚举是值类型,隐式继承自System.Enum,不能手动修改. System.Enum本身是引用类 ...

  8. asp.net web 开发中配置web.config

    一.配置数据库连接字符串 <connectionStrings> <add name="CaoLPractise" connectionString=" ...

  9. yum 安装Tomcat7(centos)

    yum 安装Tomcat7   其实最重要的就是yum源吗.初始源的里面既没有nginx也没有tomcat7. 1,搞定nginx,她家自己有源的: rpm -ivh http://nginx.org ...

  10. js清除缓存以及jsp缓存[部分常用]

    参考: http://bbs.csdn.net/topics/330028896  浏览器缓存机制 http://www.docin.com/p-591569918.html  浏览器缓存的一些问题的 ...