POJ3378_Crazy Thairs
这个题目很有意思,也是一个很好的题目,涉及的知识点比较广,要求较高。
题目是这样的,给定你一个n个数的数列,问你有多少个长度为5的上升序列。
首先看到有50000,我们就知道肯定不会是DP。(但是不知道为什么我居然在DP优化这个章节里面做到了这个题)
由于给的数是在int范围里面的,我们需要首先将其离散化,这样相当于每个数的范围只有5000了。
剩下的就是这个题目的最最精华的地方了。
其实这里的统计是用树状数组来实现的。但是不是单单由一个树状数组实现的,而是5个。
什么意思呢?我们用f[i][j]表示不大于j的长度为i的上升序列有多少个。
这样就是一个递推了哦。而对于每一个查询我们都是通过树状数组来实现的,每次查询前面每一个长度,然后加入当前这个数字,这样每次操作的时间复杂度都是O(n*log(n))。
这样答案就呼之欲出了。
但是,你确定?
自己算一下就会发现,如果给你的数为50000个上升的数字,你的程序就直接跪了。
什么意思呢?你可以算一算,C(50000,5)> 2^64,也就是说超过了long long的范围。
这个嘛,有点那个啥。
不过我们可以这样做,保存和更新的只需要是长度为4的有多少个,C(50000,4)是不会超的。这样对于最后一次加法,直接用一个高精度数组保存答案和输出就可以了。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 50500
#define M 1000000000
using namespace std; typedef long long ll;
struct node{
ll num,pos;
}a[maxn]; struct big{
ll b[],top;
void Clear()
{
memset(b,,sizeof b);
top=;
}
void output()
{
printf("%I64d",b[top]);
for (ll i=top-; i>=; i--) printf("%09I64d",b[i]);
printf("\n");
}
void Add(ll x)
{
ll cur=;
while (x) b[cur++]+=x%M,x/=M;
for (ll i=; i<top; i++) b[i+]+=b[i]/M,b[i]%=M;
while (b[top]>=M) b[top+]+=b[top]/M,b[top]%=M,top++;
}
}ans; ll f[][maxn],g[maxn];
ll n,tep; bool cmp(node n1,node n2) { return n1.num<n2.num; } void rankthem()
{
ll cur=;
for (ll i=; i<=n; i++)
{
if (a[i].num!=a[i-].num) cur++;
g[a[i].pos]=cur;
}
} ll lowbit(ll x) { return x&(-x); } void add(ll u[],ll x,ll v) { while (x<maxn) u[x]+=v,x+=lowbit(x); } ll sum(ll u[],ll x)
{
ll tot=;
while (x) tot+=u[x],x-=lowbit(x);
return tot;
} int main()
{
a[].num=~0U>>;
while (scanf("%I64d",&n)!=EOF)
{
ans.Clear();
for (ll i=; i<=n; i++) scanf("%I64d",&a[i].num),a[i].pos=i;
sort(a+,a++n,cmp);
rankthem();
memset(f,,sizeof f);
for (ll i=; i<=n; i++)
{
ans.Add(sum(f[],g[i]-));
for (ll j=; j>; j--)
{
tep=sum(f[j-],g[i]-);
add(f[j],g[i],tep);
}
add(f[],g[i],);
}
ans.output();
}
return ;
}
POJ3378_Crazy Thairs的更多相关文章
- [poj3378] Crazy Thairs (DP + 树状数组维护 + 高精度)
树状数组维护DP + 高精度 Description These days, Sempr is crazed on one problem named Crazy Thair. Given N (1 ...
- poj 3378 Crazy Thairs dp+线段树+大数
题目链接 题目大意: 给出n个数, 让你求出有多少个5元组满足 i < j < k < l < m并且ai < aj < ak < al < am 我们 ...
- ●POJ 3378 Crazy Thairs
题链: http://poj.org/problem?id=3378 题解: 树状数组维护,高精度. 依次考虑以每个位置结尾可以造成的贡献. 假设当前位置为i,为了达到5个元素的要求,我们需要求出,在 ...
- [POJ3378]Crazy Thairs
Problem 给你一个数列,让你求由五个元素组成的顺序对的个数. Solution DP:用DP[i][j]表示把第j个作为五元组中第i个的方案数 则DP[i][j]=sum{DP[k][j-1]} ...
- 【POJ】3378 Crazy Thairs(树状数组+dp+高精)
题目 传送门:QWQ 分析 题意:给个数列,求有多少五元上升组 考虑简化一下问题:如果题目求二元上升组怎么做. 仿照一下逆序对,用树状数组维护一下就ok了. 三元怎么做呢? 把二元的拓展一位就可以了, ...
- POJ 3378 Crazy Thairs(树状数组+DP)
[题目链接] http://poj.org/problem?id=3378 [题目大意] 给出一个序列,求序列中长度等于5的LIS数量. [题解] 我们发现对于每个数长度为k的LIS有dp[k][i] ...
- [POJ 3378] Crazy Thairs
Link: POJ 3378 传送门 Solution: 按序列长度$dp$, 设$dp[i][j]$为到第$i$个数,符合要求的序列长度为$j$时的序列个数, 易得转移方程:$dp[i][j]=\s ...
随机推荐
- VBox&vmware虚拟机安装Linux及Linux基础入门学习
VBox&vmware虚拟机安装Linux及Linux基础入门学习 通过VMware workstation安装Linux 在安装虚拟机之前,我特意上网搜索了一下目前常使用的虚拟机软件,了解了 ...
- 客户端与服务器端同步Evernote
原文地址:http://www.zhihu.com/question/20238731 Evernote的同步方式是 以本地为基准同步到网络 还是 以网络为基准同步到本地 的? 若客户端从未与服务器端 ...
- tkinter菜单图标,工具栏
所用的图片: import tkinter as tk from tkinter import messagebox, filedialog, simpledialog, colorchooser f ...
- day1 创建X00001文件1K
要求:创建文件名为:X000001-X999999,大小为1K 的文件 版本1) import os #1.输入要创建的文件数量 nums = int(input("nums:") ...
- day3 RHCE
10.配置NFS服务 在server0配置NFS服务,要求如下: 以只读的形式共享目录/public同时只能被example.com域中的系统访问. 以读写的形式共享目录/protected同时只能被 ...
- 博弈论(Game Theory) - 04 - 纳什均衡
博弈论(Game Theory) - 04 - 纳什均衡 开始 纳什均衡和最大最小定理是博弈论的两大基石. 博弈不仅仅是对抗,也包括合作和迁就,纳什均衡能够解决这些问题,提供了在数学上一个完美的理论. ...
- Unity Lighting - Light Types 灯光类型(八)
Light Types 灯光类型 We have now covered some of the project settings which need to be considered befo ...
- 【ANSIBLE】ansible控制windows插件安装及运行error与解决方法
一. 问:因pip版本问题无法安装kerberos 答:安装提示需要先安装pip升级包 下载pip9.0.1升级包: https://pypi.python.org/packages/b6/ac/70 ...
- Red Hat Enterprise Linux / CentOS 7 yum安装zabbix4.0
添加Zabbix存储库安装存储库配置包. 该软件包包含yum(软件包管理器)配置文件. rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_6 ...
- mysql 5.5 zip配置安装
1.解压2.创建option文件 --defaults-file=../my.ini [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mys ...