[POJ3378]Crazy Thairs
Problem
给你一个数列,让你求由五个元素组成的顺序对的个数。
Solution
DP:用DP[i][j]表示把第j个作为五元组中第i个的方案数
则DP[i][j]=sum{DP[k][j-1]} (k < i && a[k] < a[i])
所以只要用树状数组维护最小值即可
但需要离散化和高精度。
Notice
代码较长,比较容易写错
Code
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define sqz main
#define ll long long
#define reg register int
#define lowbit(x) (x & -x)
#define rep(i, a, b) for (reg i = a; i <= b; i++)
#define per(i, a, b) for (reg i = a; i >= b; i--)
#define travel(i, u) for (reg i = head[u]; i; i = edge[i].next)
const int INF = 1e9, N = 50000;
const double eps = 1e-6, phi = acos(-1.0);
ll mod(ll a, ll b) {if (a >= b || a < 0) a %= b; if (a < 0) a += b; return a;}
ll read(){ ll x = 0; int zf = 1; char ch; while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
if (ch == '-') zf = -1, ch = getchar(); while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar(); return x * zf;}
void write(ll y) { if (y < 0) putchar('-'), y = -y; if (y > 9) write(y / 10); putchar(y % 10 + '0');}
int now, T[N + 5];
struct BigInteger
{
int len;
int val[10];
/* 转换 */
BigInteger(int x = 0)
{
I_TO_B(x);
}
void I_TO_B(int x)
{
len = 0;
memset(val, 0, sizeof(val));
while(x)
{
val[len++] = x % 100000000;
x /= 100000000;
}
}
void print()
{
per(i, len - 1, 0) printf("%d", val[i]);
putchar('\n');
}
friend BigInteger operator +(BigInteger x, BigInteger y)
{
int len = x.len > y.len ? x.len : y.len;
BigInteger ans;
rep(i, 0, len - 1)
{
ans.val[i] += x.val[i] + y.val[i];
ans.val[i + 1] += ans.val[i] / 100000000;
ans.val[i] %= 100000000;
}
if (ans.val[len] != 0) len++;
ans.len = len;
return ans;
}
friend BigInteger operator +(BigInteger x, int t)
{
BigInteger y;
y.I_TO_B(t);
return x + y;
}
friend void operator +=(BigInteger &x, BigInteger y)
{
x = x + y;
}
friend void operator +=(BigInteger &x, int t)
{
x = x + t;
}
friend void operator ++(BigInteger &x)
{
x += 1;
}
};
struct Node
{
int val, id;
}x[N + 5];
int cmp(Node X, Node Y)
{
return X.val < Y.val;
}
struct node
{
BigInteger val[6][N + 5];
void build(int l, int r)
{
rep(i, 1, 5)
rep(j, l, r) val[i][j] = 0;
}
BigInteger query(int x, int y)
{
BigInteger ans = 0;
while(y)
{
ans += val[x][y];
y -= lowbit(y);
}
return ans;
}
void modify(int x, int y, BigInteger v)
{
while (y <= now)
{
val[x][y] += v;
y += lowbit(y);
}
}
}BIT;
int sqz()
{
int n;
while(~scanf("%d", &n))
{
BIT.build(1, N);
rep(i, 1, n) x[i].val = read(), x[i].id = i;
sort(x + 1, x + n + 1, cmp);
now = 0;
rep(i, 1, n)
{
if (x[i].val != x[i - 1].val) now++;
T[x[i].id] = now;
}
rep(i, 1, n)
{
BIT.modify(1, T[i], 1);
rep(j, 2, 5)
BIT.modify(j, T[i], BIT.query(j - 1, T[i] - 1));
}
BIT.query(5, now).print();
}
}
[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个元素的要求,我们需要求出,在 ...
- 【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 ...
- DevOps is dirty work - CI drives you crazy
一直很想谈谈Continuous Integration(CI),持续集成. 就在不久前一次朋友聚会上,一个刚刚跳槽到一家创业公司的朋友跟我抱怨说他们没有CI,没有code review,要做点事太累 ...
- Here's to the crazy ones.
Here's to the crazy ones. The misfits. The rebels. The troublemakers. The round pegs in the square h ...
- [poj1200]Crazy Search(hash)
Crazy Search Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26713 Accepted: 7449 Descrip ...
随机推荐
- docker下debian镜像开启ssh, 允许root用密码登录
用的官方python镜像做开发, 暴露端口, 用pycharm ssh进去开发. 忽然发现本来ssh能连上, 但是更了新的python镜像连不上了. 有折腾了一下, 连上了. 主要是python官网镜 ...
- Spring Cloud 入门教程(四): 分布式环境下自动发现配置服务
前一章, 我们的Hello world应用服务,通过配置服务器Config Server获取到了我们配置的hello信息“hello world”. 但自己的配置文件中必须配置config serve ...
- Codeforces 994 C - Two Squares
C - Two Squares 思路: 点积叉积应用 代码: #include<bits/stdc++.h> using namespace std; #define fi first # ...
- spring cloud: Hystrix(三):健康指数 health Indicator
spring cloud: Hystrix(三):健康指数 health Indicator ribbon+hystrix 当使用Hystrix时(spring-cloud-starter-hystr ...
- 【异常及源码分析】org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping
一.异常出现的场景 1)异常出现的SQL @Select("SELECT\n" + " id,discount_type ,min_charge, ${cardFee} ...
- liunx系统部署
Linux系统安装与基本配置 =======================================内容提要:获取Linux 常用发行版的方式DELL/HP/IBM 服务器介绍DELL/HP/ ...
- 20170821xlVBA隐藏空行
Sub HideBlankRowsBetweenUsedRange() Dim URows As Range, i As Long, EndRow As Long With ActiveSheet E ...
- IntelliJ IDEA 安装 Scala 插件
本页面中对在 IntelliJ 中安装 Scala 插件的步骤和方法进行了描述. 需要在 IntelliJ 安装 Scala 插件,你首先需要在你的计算机中安装 IntelliJ .IntelliJ ...
- 二叉搜索树BST(Binary Search Tree)
二叉搜索树(Binary Search Tree)也叫二叉排序树或二叉查找树.它满足以下性质: 1.非空左子树的所有键值小于其根结点的键值: 2.非空右子树的所有键值大于其根结点的键值: 3.左右子树 ...
- 字符串加密解密(Base64)
var Base64 = { // private property _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx ...