P1637 三元上升子序列
thair
好,这个naive的东西因为只有三元,很好求解。只要把每个数之前小的L[i]与之后大的R[i]求一下即可。
求两次逆序对即可。那么答案便是∑(L[i]*R[i]);
对于更高元的,胡雨菲写的是要用DP
那么先放水的一批的代码
(就这还洛谷蓝题,我直接给的黄题)
#include <cstdio>
#include <algorithm>
#define lowbit(a) (a&(-a))
using namespace std;
const int N = ;
int x[N],tree[N],n,a[N],L[N],R[N]; void add(int x,int v)
{
if(x==) return;
for(int i=x;i<=n;i+=lowbit(i)) tree[i]+=v;
return;
}
int getsum(int x)
{
if(x==) return ;
int ans=;
for(int i=x;i>;i-=lowbit(i)) ans+=tree[i];
return ans;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]),x[i]=a[i];
sort(x+,x+n+);
int k=;
for(int i=;i<=n;i++) if(x[i]!=x[i-]) x[++k]=x[i]; for(int i=;i<=n;i++)
{
int p=lower_bound(x+,x+k+,a[i])-x;
L[i]=getsum(p-);
add(p,);
}
fill(tree+,tree+n+,);
for(int i=n;i>=;i--)
{
int p=lower_bound(x+,x+k+,a[i])-x;
R[i]=(n-i)-getsum(p);
add(p,);
}
long long ans=;
for(int i=;i<=n;i++) ans+=L[i]*R[i];
printf("%lld",ans);
return ;
}
AC代码:
P1637 三元上升子序列的更多相关文章
- 洛谷P1637 三元上升子序列
P1637 三元上升子序列 48通过 225提交 题目提供者该用户不存在 标签云端 难度提高+/省选- 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 为什么超时啊 a的数据比较 ...
- 【luogu P1637 三元上升子序列】 题解
题目链接:https://www.luogu.org/problemnew/show/P1637 BIT + 离散化. 读题得数据规模需离散化.BIT开不到longint这么大的数组. 对于题目所求的 ...
- Luogu P1637 三元上升子序列【权值线段树】By cellur925
题目传送门 emmm..不开结构体的线段树真香! 首先我们知道"三元上升子序列"的个数就是对于序列中的每个数,**它左边比他小的数*它右边比他大的数**.但是如何快速求出这两个数? ...
- 洛谷p1637 三元上升子序列(树状数组
题目描述 Erwin最近对一种叫"thair"的东西巨感兴趣... 在含有n个整数的序列a1,a2......an中, 三个数被称作"thair"当且仅当i&l ...
- 【洛谷P1637】三元上升子序列
题目大意:给定一个长度为 N 的序列,求有多少个三元组满足 \(i<j<k,a_i<a_j<a_k\). 题解:这是一类二维偏序问题,与逆序对问题类似. 对于序列中每个点来说, ...
- 【Luogu P1637】 三元上升子序列
对于每个数$a_i$,易得它对答案的贡献为 它左边比它小的数的个数$\times$它右边比它大的数的个数. 可以离散化后再处理也可以使用动态开点的线段树. 我使用了动态开点的线段树,只有需要用到这个节 ...
- [LeetCode] Increasing Triplet Subsequence 递增的三元子序列
Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ...
- LeetCode:递增的三元子序列【334】
LeetCode:递增的三元子序列[334] 题目描述 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i ...
- Leetcode 334.递增的三元子序列
递增的三元子序列 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n- ...
随机推荐
- shell中的>,2>&1,&>file 解析记录
0 表示标准输入1 表示标准输出2 表示标准错误输出> 默认为标准输出重定向,与 1> 相同2>&1 意思是把 标准错误输出 重定向到 标准输出.&> ...
- jQuery的each使用陷阱
注意:jQuery使用each()函数进行循环时发现return false不能阻止程序继续向下执行 原因如下: (1)开始还以为是jQuery的each()函数是异步执行的,所以导致出错,其实不是. ...
- 一、ABP框架框架摘要
ABP框架几点说明: 一.什么是ABP ABP是一个建立在最新的ASP.NET的MVC和Web API技术的应用框架.它可以很容易地使用依赖注入.日志记录.验证.异常处理.本地化等,也使用流行的框架和 ...
- Linux下 rewrite_mod 的配置
以下使用最新的 Ubuntu 16.04 测试; 安装好apache后先确认有没有rewrite模块,大多数情况下是有的:ls /etc/apache2/mods-available |grep re ...
- ASP.Net Post方式获取数据流的一种简单写法
public static string PostWebReq(string PostUrl, string ParamData, Encoding DataEncode) { ...
- Unable to resolve target 'android-15'
SDK 15没有加载造成的,在SDK Manager.exe下安装以下文件 Android SDK Tools (25.2.5) Android SDK Platform-tools (28.0.1) ...
- python史上最全学习路线图
ps:盘它 python入门教程 关注微信公众号,回复"python入门"获取视频下载地址
- 在一般类中通过XmlWebApplicationContext对象获取应用部署上下文Context
XmlWebApplicationContext xwac = (XmlWebApplicationContext) ContextLoader.getCurrentWebApplicationCon ...
- BZOJ4128Matrix——hash+矩阵乘法+BSGS
题目描述 给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p) 输入 第一行两个整数n和p,表示矩阵的阶和模数,接下来一个n * n的矩阵A.接下来一个n * n的矩阵B 输出 输出 ...
- DRF 分页组件
Django Rest Framework 分页组件 DRF的分页 为什么要使用分页 其实这个不说大家都知道,大家写项目的时候也是一定会用的, 我们数据库有几千万条数据,这些数据需要展示,我们不可能直 ...