【HDOJ】2492 Ping pong
线段树+离散化。
#include <cstdio>
#include <cstring>
#include <cstdlib> #define MAXN 20005
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 int buf[MAXN], bk[MAXN];
int sum[MAXN<<], n; int comp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
} void PushUP(int rt) {
sum[rt] = sum[rt<<] + sum[rt<<|];
} void build(int l, int r, int rt) {
sum[rt] = ;
if (l == r)
return ;
int mid = (l+r)>>;
build(lson);
build(rson);
} int query(int ll, int rr , int l, int r, int rt) {
if (ll<=l && r<=rr)
return sum[rt];
int mid = (l+r)>>;
int ret = ;
if (ll <= mid)
ret += query(ll, rr, lson);
if (rr > mid)
ret += query(ll, rr, rson);
return ret;
} void update(int x, int l, int r, int rt) {
if (l == r) {
++sum[rt];
return ;
}
int mid = (l+r)>>;
if (x <= mid)
update(x, lson);
else
update(x, rson);
PushUP(rt);
} int getIndex(int x) {
int l=, r=n, mid; while (l <= r) {
mid = (l+r)>>;
if (bk[mid] == x)
return mid;
if (x > bk[mid])
l = mid + ;
else
r = mid - ;
}
return ;
} int main() {
int t;
int i;
int index;
__int64 ll, lg, rl, rg;
__int64 ans; scanf("%d", &t);
while (t--) {
scanf("%d", &n);
for (i=; i<=n; ++i) {
scanf("%d", &buf[i]);
bk[i] = buf[i];
}
build(, n, );
qsort(bk+, n, sizeof(int), comp);
ans = ;
for (i=; i<=n; ++i) {
index = getIndex(buf[i]);
ll = query(, index, , n, );
lg = i--ll;
rl = index--ll;
rg = n-index-lg;
ans += ll*rg + lg*rl;
update(index, , n ,);
}
printf("%I64d\n", ans);
} return ;
}
【HDOJ】2492 Ping pong的更多相关文章
- HDU 2492 Ping pong (树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2492 Ping pong Problem Description N(3<=N<=2000 ...
- POJ 3928 & HDU 2492 Ping pong(树阵评价倒数)
主题链接: PKU:http://poj.org/problem?id=3928 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2492 Descript ...
- HDU 2492 Ping pong (数状数组)
Ping pong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 2492 Ping pong(数学+树状数组)(2008 Asia Regional Beijing)
Description N(3<=N<=20000) ping pong players live along a west-east street(consider the street ...
- 【HDOJ】4729 An Easy Problem for Elfness
其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...
- 【Linux】【通信】1.ping不通
关于为什么ping不通有很多种原因,但直接的表象就网络之间没有成功进行通讯: 在构建虚拟机和win之间的交互时,主要使用了3种网络模式: 桥接bridge VMnet0 主机host VMne ...
- 【HDOJ】【3506】Monkey Party
DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...
- 【HDOJ】【3516】Tree Construction
DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...
- 【HDOJ】【3480】Division
DP/四边形不等式 要求将一个可重集S分成M个子集,求子集的极差的平方和最小是多少…… 首先我们先将这N个数排序,容易想到每个自己都对应着这个有序数组中的一段……而不会是互相穿插着= =因为交换一下明 ...
随机推荐
- Swift-Dictionary
1.字典写法 Dictionary<KeyType,ValueType>,KeyType是你想要储存的键,ValueType是你想要储存的值. 唯一的限制就是KeyType必须是可哈希的, ...
- C++类的成员函数(在类外定义成员函数、inline成员函数)
类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...
- spring mvc DispatcherServlet详解前传---HttpServletBean类
从上章里我们已经看到: DispatcherServlet extends FrameworkServlet FrameworkServlet extends HttpServletBean impl ...
- Linux Terminal 控制终端的使用
1. Open new Terminal:Ctrl + Alt + T 或者 Ctrl + Shift + N 2. Open Tab:Ctrl + Shift + T 3. Close Tab:Ct ...
- DTD简单使用
DTD:Document Type Definition DTD是一种简单的XML约束模式语言 DTD文档必须以utf-8或unicode编码 注释方式与HTML.XML文档相同 DTD文档的引用:紧 ...
- Linux FTP YUM源搭建简单记录
1. 挂载iso镜像,进入Packages目录下安装FTP服务 #rpm -ivh vsftpd-3.0.2-10.el7.x86_64.rpm 2. 修改vsftpd配置文件如下 [root@rus ...
- 连接管理VMware SphereESXi
连接管理VMware SphereESXi 1. 准备 下载VMware-viclient-all-5.5.0-1993072,并按照提示安装 2. 使用VMware Sphere Client链接事 ...
- noip 2012 借教室 (线段树 二分)
/* 维护区间最小值 数据不超int 相反如果long long的话会有一组数据超时 无视掉 ll int */ #include<iostream> #include<cstdio ...
- Linq101-Projection
using System; using System.Linq; namespace Linq101 { class Projection { /// <summary> /// This ...
- asp.net中Request.ServerVariables的用法
在asp.net中可以通过HttpRequest.ServerVariables 属性来获取“ Web 服务器变量的集合” HttpRequest.ServerVariables 的用法: HttpR ...