uva 1428 Ping pong (树状数组)

若依(RuoYi)框架从零到部署:Spring Boot+Vue权限系统完整配置指南 在Java企业级应用开发中,Spring Boot作为构建微服务和单体应用的基石,极大地简化了项目初始化和配置流程。其核心原理在于通过自动配置和起步依赖,快速整合数据访问、安全认证、缓存等常用模块,显著提升开发效率。这一技术价值在需要快速构建后台管理系统的场景中尤为突出,例如权限管理、用户角色分配等通用需求。若依(RuoYi)框架正是基于Spring Boot和Vue.js的优秀实践,它封装了RBAC权限模型、代码生成器等高频功能,提供了开箱即用的解决方案。本文聚焦于若依框架的【环境配置】与【项目部署】,通 阅读详情

题意:

一条街道上有N个选手,他们要打乒乓球赛,每个人有一个自己的skill rank,且是N个不同的数。每场比赛需要一个裁判,要求这个裁判的skill rank不能高于也不能低于这两个选手,且在街上住的位置必须在两个选手之间。问可以组织多少场比赛。


开始想到了可以用树状数组处理每个人前面有多少sr(skill rank)大于他的。但是开始想法是枚举起止点开中间有多少符合要求的裁判,是N方的。看了刘汝佳白书才知道正确做法是枚举中间的裁判。


对于裁判i,假设我们知道他之前sr小于他的人数Front【i】,和之后sr大于他的人数Back【i】。

那么他能组织的比赛数量就是Front【i】*Back【i】+(i-1-Front【i】)*(N-i-Back【i】)   (左小右大和左大右小)


这样O(n)遍历一遍就行了。


求Front【i】,Back【i】的方法和求逆序数一样。

求出Front【i】后求Back【i】不需要重新排序,清空c数组后从后往前再做一遍,但因为遍历是从后到前,而查询还是从前往后的。所以做的时候把需要+1的位置ord修改为N-i-ord就可以了。


代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define LL long long
struct node{
    int num,ord;
}G[20010];
int a[20010];
int c[20010];
int Front[20010];
int Back[20010];
int N;
int lowbit(int n){
    return n&(-n);
}

int sum(int p){
    int res=0;
    while(p<=N){
        res+=c[p];
        p+=lowbit(p);
    }
    return res;
}


void add(int p,int n){
    while(p>0){
        c[p]+=n;
        p-=lowbit(p);
    }
}

bool cmp(node a,node b){
    if(a.num==b.num) return a.ord<b.ord;
    return a.num<b.num;
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&N);
        memset(c,0,sizeof(c));
        for(int i=1;i<=N;i++){
            scanf("%d",&G[i].num);
            G[i].ord=i;
        }
        sort(G+1,G+N+1,cmp);
        for(int i=1;i<=N;i++){
            Front[i]=sum(G[i].ord);
            add(G[i].ord,1);
        }
        memset(c,0,sizeof(c));
        for(int i=N;i>=1;i--){
            int pos=N-G[i].ord+1;
            Back[i]=sum(pos);
            add(pos,1);
        }
        long long res=0;
        for(int i=1;i<=N;i++){
            res+=Front[i]*Back[i];
            res+=(N-i-Back[i])*(i-1-Front[i]);
        }
        printf("%lld\n",res);
    }
    return 0;
}





相关推荐

RK3588上跑通Zipformer语音识别的3个坑与填坑实录(附完整编译命令)

本文详细记录了在RK3588开发板上部署Zipformer语音识别模型时遇到的三个典型问题及其解决方案,包括静态库版本冲突、编译脚本配置错误以及模型转换精度调优。文章提供了完整的编译命令和实战步骤,帮助开发者快速在边缘设备上实现高效的语音识别应用。

l6m7n8的博客 716

UVA1428 Ping pong(树状数组)

UVA1428 Ping pong(树状数组) 传送门 思路:权值树状数组。 考虑枚举每个位置作为裁判对答案的贡献。 显然有两种情况: 1.a[l]<a[i]<a[r],l<i<r1.a[l]<a[i]<a[r],l<i<r1.a[l]<a[i]<a[r],l<i<r 2.a[l]>a[i]>a[r],l<i<r2.a[l]>a[i]>a[r],l<i<r2.a[l]>a[i]&gt

Harris-H的博客 607

基于STM32的双串口同时工作的详细指南(含完整代码示例)

STM32是STMicroelectronics(意法半导体)公司推出的一系列基于ARM Cortex-M内核的微控制器,广泛应用于嵌入式系统中。STM32系列微控制器具有高性能、低功耗和丰富的外设接口,适用于各种应用场景。USART(Universal Synchronous/Asynchronous Receiver/Transmitter)和UART(Universal Asynchronous Receiver/Transmitter)是串口通信的两种方式。

m0_57781768的博客 3805

UVA1428 - Ping pong(树状数组)

UVA1428 - Ping pong(树状数组) 题目链接 题目大意:有N个人,每个人都有一个技能值ai,现在要开展乒乓球比赛,要求要有两个选手和一个裁判,要求裁判需要在两名选手的中间而且技能值也是在两名选手的中间,问可以开展多少场比赛。 解题思路:对于第i个选手当裁判的话,设它前面位置的选手有ci个技能值比它低的,那么就有i - 1 - ci个比它高的,对于第i选手后面的位置

1132

【数据挖掘】遗传算法原理浅析:什么是遗传算法?遗传算法的工作原理是什么?

遗传算法(Genetic Algorithm,GA),是进化算法的框架和核心。 各种进化算法有什么异同? - 及时物语的回答 - 知乎 https://www.zhihu.com/question/39152390/answer/901070749

纸羊同学的博客 4280

基于STM32L4XX 、HAL库的STSPIN32G4三相无刷直流电机(BLDC)驱动应用C语言程序设计

/ 设置PWM模式为6步换相。│PA5-7 ├── SPI ────►│SCK/MISO│ │ 三相桥 │。– 2路电机控制高级定时器(16位,支持6路 PWM 通道)// 60度电气周期对应转速 = 60/(极对数 * 6 * 周期)// 电气角度(0-3599)

PP_Cottage的博客 147

uva 1428 - Ping pong(树状数组)

题目链接:uva 1428 - Ping pong 题目大意:一条大街上住着n个乒乓球爱好者,经常组织比赛。每个人都有一个不同的能力值,每场比赛需要3个人,裁判要住在两个选手之间,并且能力值也要在选手之间,问说最多能举行多少场比赛。 解题思路:预处理出bi和ci分别表示说在1~i中能力值比第i个人小的人和i+1~n中能力值比第i个人小的。处理过程用树状数组维护即可。 #include

不慌不忙、不急不躁 1576

15 RK3568 RTL8111 PCIE

我这边扩了三个网卡。pcie3.0拆分了1+1lane。需要注意自己的reset引脚修改为自身rtl引脚即可。1、调试pcie 扩展网卡 RTL8111。

qq_39451352的博客 180

树状数组-UVa1428 Ping pong题解

算法分析 一、为何看到这道题想到用树状数组? 首先看到题目上有一句话:For some reason, the contestants can’t choose a referee whose skill rank is higher or lower than both of theirs.也就是说裁判的技能值必须要在两个玩家之间。但是这句话还不能让我们确定用树状数组来做这道题。还有一个关键在于...

numb_ac的博客 194

深度学习100例-卷积神经网络(CNN)彩色图片分类 | 第2天

文章目录前期工作设置GPU导入数据标准化可视化构建CNN网络编译训练模型预测模型评估 前期工作 设置GPU 如果使用的是CPU可以忽略这步 import tensorflow as tf gpus = tf.config.list_physical_devices("GPU") if gpus: gpu0 = gpus[0] #如果有多个GPU,仅使用第0个GPU tf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量

“365天深度学习训练营”报名进行中~ 7855

华为OD机试真题 Java&Go 实现【优雅子数组】【100%通过率】【2022.11 Q4 新题】

如果一个数组中出现次数最多的元素出现大于等于K次,被称为K -优雅数组,k也可以被称为优雅阈值。例如,数组1,2,3,1、2,3,1,它是一个3-优雅数组,因为元素1出现次数大于等于3次,数组1,2,3,1,2就不是一个3-优雅数组,因为其中出现次数最多的元素是1和2,只出现了2次。给定一个数组A和k,请求出A有多少子数组是k-优雅子数组。

MISAYAONE的博客 1万+

UVA 1428 - Ping pong(树状数组)

UVA 1428 - Ping pong 题目链接 题意:给定一些人,从左到右,每个人有一个技能值,现在要举办比赛,必须满足位置从左往右3个人,并且技能值从小到大或从大到小,问有几种举办形式 思路:利用树状数组处理出每个位置左边比它小的个数和右边比他小的个数和,那么左边和右边大就也能计算出来,那么比赛场次为左边小*右边大+左边大*右边小。 代码: #include

Remilia's 2102

北斗导航 | ILS(仪表着陆系统)、MLS(微波着陆系统)和GBAS(地基增强系统)的性能对比

最 早 的 GBAS 系 统 是 **局 域 增 强 系 统(LAAS)**,它是 1990 年由美国 Honeywell 公司 和 NASA 共 同 完 成 的 差 分 GPS(DGPS)演 变 而 来 的。1998 年,LAAS 被 ICAO 采 纳为 GBAS。2009 年 9 月 3 日 Honeywell 公 司 的GBAS 系统通过了 **CAT-I 精密进近着陆系统**的设计认证 ,而 **CAT-II 和 CAT-III 系统的研发和验证工作也正在有序的进行中**

尘世冰封的专栏 3987

UVa 1428 Ping pong (树状数组)

题目链接:http://acm.hust.edu.cn/vjudge/problem/36244 题目大意:给出n个不同的数,从左到右按顺序选出三个a1,a2,a3,使得a1>a2&&a2a3,问有多少种选法。 思路:本题的关键在于,对于任意一个数,怎样快速求出它的两边各有多少个数比它大(小)。我们以左边为例,假设当前的数为a[i],那么它的左边比它小的数的个数即为1,2,3.

Interstellar_的博客 544

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Ping pong UVA - 1428(树状数组)

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...

tomjobs的博客 443

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Ping pong UVA - 1428 树状数组

这个题目,就是对于一个树状数组的考察,更新,求和,先说一下题目的意思,题目的要求就是需要统一,满足要求的情况下,有多少中可能,我们需要做的就是枚举裁判,然后对于一个裁判,a0 在a1到ai-1比他小的有ci个,那就有i - ci个比他大的, 同样我们需要统计在ai+1 到an-1 有di个比ai小的,然后就会有 n - 1 - i - di 个比他大的,然后根据加法原理,得到的公式为(LL)(c[

ming_514 279

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

树状数组(二叉索引树)(uva 1428 - Ping pong )

个人认为树状数组在功能上是RMQ

LHYL 1431

uva 1428 - Ping pong(树状数组,4级)

N (3N20000) 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 oth

nealgavin的专栏 1408

UVa:1428 Ping pong (树状数组)

如果之前做过树状数组求逆序数那再做这道题就很轻松了。 枚举以每个人为裁判,有两种情况,左边的人值比裁判小右边的人比裁判大,左边的人值比裁判大右边的人值比裁判大。左右两边相乘,两种情况相加就是答案。第一种情况需要统计位于裁判左边值比它小的个数和位于右边值比它大的个数,而第二种情况可以由第一种情况推出来。 所以重点就在统计位于裁判左边值比它小的个数和位于右边值比它大的个数。 这就需要用树状数组了

Fighting 795

【uva】1428 - Ping pong(树状数组)

树状数组

花月阁 633
上一篇: uva 11997 K Smallest Sum(多路并归+优先队列)
下一篇: Codeforces Round #273 (Div. 2) C. Table Decorations
Baoli1008
博客等级 码龄12年 70粉丝 293原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值