Beijing 2008 / UVa 1428 / POJ 3928 / HDU 2492 Ping pong (树状数组)

SQLSTATE58030 在优化一条SQL的时候遇到了执行错误 gtlions =# select t1.telnumber,t2.ua,t2.url,t1.apply_name,t2.apply_name from tb1 t1 gtlions -# left outer join tb2 t2 on t1.sid = t2.ipsid gtlions-# where t1.sum_date=20141128 a 阅读详情
Ping pong


Time Limit:  1000MS
Memory Limit: 65536K

Description

N(3<=N<=20000) ping pong players live along a west-east street(consider the street as a line segment). Each player has a unique skill rank. To improve their skill rank, they often compete with each other. If two players want to compete, they must choose a referee among other ping pong players and hold the game in the referee's house. For some reason, the contestants can't choose a referee whose skill rank is higher or lower than both of theirs. The contestants have to walk to the referee's house, and because they are lazy, they want to make their total walking distance no more than the distance between their houses. Of course all players live in different houses and the position of their houses are all different. If the referee or any of the two contestants is different, we call two games different. Now is the problem: how many different games can be held in this ping pong street?

Input

The first line of the input contains an integer T(1<=T<=20), indicating the number of test cases, followed by T lines each of which describes a test case. 
Every test case consists of N + 1 integers. The first integer is N, the number of players. Then N distinct integers a1, a2 ... aN follow, indicating the skill rank of each player, in the order of west to east. (1 <= ai <= 100000, i = 1 ... N).

Output

For each test case, output a single line contains an integer, the total number of different games. 

Sample Input

1 
3 1 2 3

Sample Output

1


题意抽象:
已知数列{aN} (3<=N<=20000),从左往右取三个不同的数(可以不相邻),求使这三个数排成升序或降序的取法数。

解法:
复杂度:

思路:用树状数组维护每个能力值的个数。
1. 对ai(1<i<N),求在其左边或右边且小于其的数的个数ll[i]和rl[i]。
const int MAXN = 20002;
int a[MAXN], ll[MAXN], rl[MAXN];//leftlower,rightlower

scanf("%d", &a[1]);
update(a[1], 1);
for (i = 2; i < n; i++)
{
    scanf("%d", &a[i]);
    update(a[i], 1);
    ll[i] = sum(a[i] - 1);
}
scanf("%d", &a[n]);

//注意这里要清空树
memset(rank, 0, sizeof(rank));
update(a[n], 1);
for (i = n - 1; i > 1; i--)
{
    update(a[i], 1);
    rl[i] = sum(a[i] - 1);
}

2. 注意到在数列{aN}是递增或递减数列的情形时,取法数达到最大,为(N-2)(N-1)N/6,数据最大约10^15,所以这里用long long。
计算Σ(i=2,n-1) ll[i] * (n - i - rl[i]) + (i - 1 - ll[i]) * rl[i],搞定。
long long ans = 0;
for (i = 2 ; i < n; i++)
{
    ans += ll[i] * (n - i - rl[i]) + (i - 1 - ll[i]) * rl[i];
}

完整代码:

/*UVa: 0.269s*/
/*POJ: 235ms,792KB*/
/*HDU: 109ms,904KB*/

#include<cstdio>
#include<cstring>
const int MAXN = 100002;
const int MAXN2 = 20002;

int rk[MAXN], a[MAXN2], ll[MAXN2], rl[MAXN2];

void update(int a, int val)
{
	while (a <= MAXN)
	{
		rk[a] += val;
		a += -a & a;
	}
}

int sum(int a)
{
	int sum = 0;
	while (a > 0)
	{
		sum += rk[a];
		a -= -a & a;
	}
	return sum;
}

int main()
{
	int i, t, n;
	long long ans;
	scanf("%d", &t);
	while (t--)
	{
		scanf("%d", &n);
		memset(rk, 0, sizeof(rk));
		scanf("%d", &a[1]);
		update(a[1], 1);
		for (i = 2; i < n; i++)
		{
			scanf("%d", &a[i]);
			update(a[i], 1);
			ll[i] = sum(a[i] - 1);
		}
		scanf("%d", &a[n]);
		memset(rk, 0, sizeof(rk)); ///注意这里要清空
		update(a[n], 1);
		for (i = n - 1; i > 1; i--)
		{
			update(a[i], 1);
			rl[i] = sum(a[i] - 1);
		}
		ans = 0;
		for (i = 2 ; i < n; i++)
			ans += ll[i] * (n - i - rl[i]) + (i - 1 - ll[i]) * rl[i];
		printf("%lld\n", ans);
	}
	return 0;
}


FastAPI + Layui:打造企业级敏捷开发后台管理系统 本文详细介绍了如何使用FastAPI和Layui构建高效的企业级后台管理系统。FastAPI提供高性能的异步API支持,而Layui则简化了前端开发流程,两者结合可实现快速开发和部署。文章涵盖了从环境搭建、核心组件开发到性能优化的全流程,特别适合需要敏捷开发的企业项目。 阅读详情

相关推荐

升降机SEW MOVIDRIVE变频器设置

选择PO1 第2,3,9,13 位,点击“SendPA”Start reference,编码器反馈值为0(PI2/3 Actual position=0)提示:传送参考位置前请断开变频器安全24V电源,否则会弹出禁止修改提示框;提示:做这一步时,如果出现电机不能转动,或产生报警不能通过编码器匹配。下载配置的参数,提示:下载参数需要断开变频器的安全24V电源。编码器匹配通过后点击下一步,进入下图画面传送参考位置。1电机不能转动:a可能是由于变频器的安全24V未给。点击2.SEW总线扩展定位,定位块设置。

xdpcxq的专栏 5395

HDU 2048 神、上帝以及老天爷 (递推&错排概率)

思路: 1. N张字条的所有可能排列自然是N!(分母)。 现在的问题就是求N张字条的错排数f(N)(分子)。 首先我们考虑,如果前面N-1个人拿的都不是自己的票,即前N-1个人满足错排,现在又来了一个人,他手里拿的是自己的票。只要他把自己的票与其他N-1个人中的任意一个交换,就可以满足N个人的错排。这时有(N-1)*f(N-1)种方法。 Besides,我们考虑,如果前N-1个人不满足错排,而第N个人把自己的票与其中一个人交换后恰好满足错排。 这种情况发生在原先N-1人中,N-2个人满足错排,有且仅有一个人

AC,∑ndless 3640

GOM引擎单机传奇架设全攻略——从DBC2000配置到登录器生成

本文详细解析了使用GOM引擎架设单机传奇的完整流程,从DBC2000的安装配置、服务端部署、引擎控制器设置,到登录器生成与客户端补丁放置。文章重点解决了单机架设中的常见问题,如数据库路径配置、IP地址设置及Key.lic文件处理,旨在帮助玩家快速搭建稳定的个人游戏环境,体验GM乐趣。

weixin_28318011的博客 628

HDU 2973 / UVa 1434 / CERC 2008 YAPTCHA (威尔逊定理及其逆定理)

http://acm.hdu.edu.cn/showproblem.php?pid=2973 思路: 当n是合数时,((n-1)!+1)/n不为整数,所以在题目的和式中该部分为0;n是质数时就为1了。 所以筛一遍素数就出符合3k+7类型的素数即可。 额外说一句,当a,b互素时,形如an+b的素数有无穷个。(wiki:Dirichlet's theorem o

AC,∑ndless 3361

ADS Layout设计实战:从参数设置到协同仿真

本文详细介绍了ADS Layout设计的完整实战流程,从新建工程、单位设置、个性化偏好配置等基础操作入手,逐步深入到基板参数配置、端口设置与电磁仿真器选择等核心环节。重点阐述了参数化版图设计与扫描优化、以及原理图与Layout协同仿真的高级技巧,并通过一个微带线低通滤波器设计案例,完整演示了从理论到实现的闭环设计方法,帮助工程师高效、准确地完成高频电路版图设计与验证。

weixin_29268637的博客 797

【feature_column处理】- indicator_column(指示列)和embedding_column(嵌入列)

1. 开胃菜 我们先来了解一下tf.feature_column.input_layer def input_layer(features, feature_columns, weight_collections=None, trainable=True, cols_to_vars=None, cols_to_output_tensors=None)

DataAlgo 1487

HDU 4497 GCD and LCM (数论&组合数学)

部分思路来自之前的一道题(UVa 10892)。 解释下这里的6是怎么来的: 设L/G=(p1^r1)*(p2^r2)*(p3^r3)…(pm^rm) 又设 x=(p1^i1)*(p2^i2)*(p3^i3)…(pm^im) y=(p1^j1)*(p2^j2)*(p3^j3)…(pm^jm) z=(p1^k1)*(p2^k2)*(p3^k3)…(pm^km) 对于某个r,i、j、k里面一定有一个是r,并且一定有一个是0,所以i,j,k有一下3种情况: r 0 0 ,有C(3,1)种 r 0 r ,有C(3,

AC,∑ndless 2703

STM32 伺服电机 指令脉冲+方向位置控制模式 主从定时器 实现PWM脉冲数精确控制

实验室有个项目涉及到多个步进电机以及伺服电机的控制,需要电机得到一个触发信号后精确移动一段距离。 下面以单个伺服电机控制为例,利用伺服电机的指令脉冲加方向位置控制模式实现jing'que ...

phcdd的博客 2万+

铺瓷砖问题 HDU 2046 骨牌铺方格 + POJ 2663 Tri Tiling (递推)

骨牌铺方格 http://acm.hdu.edu.cn/showproblem.php?pid=2046 Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/32768 K (Java/Others) Problem Description 在2×n的一个长方形方格中,用一个1× 2

AC,∑ndless 2511

国产平替NeuroSky?实测金牛座TGAM脑电模块,从Arduino到Python的完整数据采集指南

本文详细介绍了国产金牛座TGAM脑电模块的完整使用流程,包括硬件连接、数据采集和Python分析。通过Arduino和Python的实战案例,展示了如何从脑电波传感器获取并解析专注度、放松度等数据,适用于专注力训练和脑机接口开发。

weixin_30735745的博客 575

《Python星球日记》 第43天:机器学习概述与Scikit-learn入门

《Python星球日记》 第43天:机器学习概述与Scikit-learn入门

Code_流苏:在代码中寻诗意,在实践中觅真知 932

HDU 4254 A Famous Game (概率&组合数学公式)

x

AC,∑ndless 2390

45.qt quick-qml虚拟软键盘详解(一)

1.qml虚拟键盘介绍 Qt虚拟键盘的主要功能包括: 可定制的键盘布局和风格与动态切换。 带有单词选择的预测性文本输入。 角色预览和替代角色视图。 自动大小写和空格插入。 不同分辨率的可伸缩性。 支持不同的字符集(拉丁,简体/繁体中文,印地语,日语,阿拉伯语,希伯来语,韩语和其他)。 支持大多数常见的输入语言,可以轻松扩展语言支持。 从左到右和从右到左的输入。 硬件键支持2路和5路导航。 手写支持,带有全屏输入的手势。 音频反馈。 跨平台功能。 支持多国语言,高达40多个语言 本

抵抗时间扭曲,坚持做一件有意义的事 3559

HDU 4549 M斐波那契数列 (费马小定理降幂&矩阵快速幂)

http://acm.hdu.edu.cn/showproblem.php?pid=4549 Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的值吗?

AC,∑ndless 2347

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

UVa 100 / HDU 1032 / POJ 1207 The 3n + 1 problem (数论&Collatz序列周期)

介绍: 这题说的是奇偶归一猜想(英语:Collatz conjecture),又称为3n+1猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。 注意: 1. 一开始我调试的时候发现用int会超数据,但直接用int交可以AC(这只能说明OJ上的测试数据没完善。。) 2. i可能大于j,一开始读题的时候就yy会不会出给这么变态的数据,没想到真的这样。。 3. 使用一个数组保存算过的数据,可减

AC,∑ndless 2331

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

HDU 2045 不容易系列之(3)—— LELE的RPG难题 (组合数学)

递推:f(n)=f(n-1)+2*f(n-2) 证明:考虑长为n的串。若前n-1位组成的串合法,则由于首尾不同,再添加一位时,只有1种颜色可选;若前n-1位组成的串不合法(首尾相同),那么前n-2位组成的串必须合法(因为最终要组成的n位是合法的)。此时第n位有2种颜色可选。故f(n)=f(n-1)+2*f(n-2)。 边界条件:f(1)=3,f(2)=f(3)=6。 PS:可用特征方程得出n>3时f(n)的封闭形式f(n)=2^n+2*(-1)^n。 完整代码:

AC,∑ndless 2197

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

HDU 2050 折线分割平面 (递推)

折线分割平面 http://acm.hdu.edu.cn/showproblem.php?pid=2050 Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/32768 K (Java/Others) Problem Description 我们看到过很多直线分割平面的题目,今

AC,∑ndless 2160

数位DP小记 + HDU 2089 不要62

【背景】 如何求出在给定区间[A,B]内,符合条件P(i)的数i的个数? 条件P(i)一般与数的大小无关,而与数的组成有关,有一下几种P(i): 数i是递增/递减的:1234, 2579,… 双峰的:19280,26193,… 含/不含某一数字的,比如含49:49, 149, 1492,…  被某一数m整除的,比如m=13:39,130,650... 【思路】 采用

AC,∑ndless 2156

HDU 2281 Square Number (Pell方程&数论)

http://acm.hdu.edu.cn/showproblem.php?pid=2281 思路: 原式化为:m^2-48x^2=1,(m=4n+3) 立即得到最小正整数解:m1=7,x1=1 后面就和uva 138一样了。 注意:得到mk后还要判断(mk-3)%4==0才能加到n中,详见代码。 完整代码: /*31ms,276KB*/ #include #i

AC,∑ndless 2011

POJ 2559 / HDU 1506 / LightOJ 1083 Largest Rectangle in a Histogram (单调栈)

Largest Rectangle in a Histogram http://poj.org/problem?id=2559 Time Limit: 1000MS Memory Limit: 65536K Description A histogram is a polygon composed of a sequence of rectangles ali

AC,∑ndless 1991

POJ 1276 Cash Machine (多重背包&单调队列)

http://poj.org/problem?id=1276 模板题。 完整代码: /*110ms,4316KB*/ #include #include const int mx = 1005; const int mxw = 1000005; int w[mx], m[mx], dp[mxw], deq[mxw], deqv[mxw]; int solve(int m

AC,∑ndless 1846

HDU 1394 Minimum Inversion Number (最小逆序对数&线段树)

http://acm.hdu.edu.cn/showproblem.php?pid=1394 每读一个数,先查询前面有多少比它大的数(在代码中我们是查询[x,n-1]范围内的数),然后将位置x的数+1 把第一个数在序列末尾时,因为比x小的数(0~x-1)都在x前面了,所以逆序对数减少了x;因为比x大的数(x+1~n-1)都在x前面了,所以逆序对数增加了n-1-x。这样每次移动,逆序对数

AC,∑ndless 1813

HDU 1496 Equations (hash)

Equations http://acm.hdu.edu.cn/showproblem.php?pid=1496 Time Limit: 6000/3000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) Problem Description Consider eq

AC,∑ndless 1740

【数据结构】基于比较的排序算法 - 交换排序

本文介绍交换排序中的冒泡排序与快速排序。冒泡排序通过相邻元素比较交换,实现升序,时间复杂度最坏为O(N²),空间复杂度O(1),稳定且适合小规模有序数据。快速排序采用分治思想,以基准值划分区间,平均时间复杂度O(N log N),空间复杂度O(log N),但不稳定,实际应用中性能优异,可通过随机基准、小区间优化等提升效率。

careathers的博客 329

pandas 深度入门:从数据结构到一份真实销售报表

本文系统讲解Pandas核心应用,从三分钟安装到完整月度报表生成,涵盖数据读取、清洗、筛选、分组聚合、表连接、透视表与时间序列等13个关键环节。强调“先看数据再动手”,掌握Series/DataFrame/Index结构本质,熟练运用loc/iloc、merge校验、agg/transform区别,通过真实案例实现高效报表自动化,告别手动Excel操作。最后提供性能优化与高频报错解决方案,助力读者快速上手,真正实现“写二十行代码,跑三秒出结果”。

信息安全领域优质创作者|操作系统领域专家 266

工单系统的数据结构化:故障分类体系设计与报表可用性

很多团队上完工单系统半年,会发现一个尴尬的事实:单子照常在走,报表却始终出不来。导出的 Excel 几千行,看不出趋势、算不出口径、答不了"哪类故障占大头"。问题几乎都不在系统,而在数据模型的第一层——。这篇文章把这件事拆开讲:自由文本为什么会失效、分类体系怎么分层、表怎么建、老数据怎么迁、上线前怎么验收。

ITyunwei0987的博客 278
上一篇: POJ 3067 Japan(树状数组求逆序对)
下一篇: POJ 1631 / HDU 1950 / ZOJ 1986 / Northwestern Europe 2003 Bridging signals (DP&LIS)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值