#ST表#CF1879F Last Man Standing
分析
当 \(x\) 大于最大值时一定可以被约化为等于的情况,考虑枚举 \(x\),
通过枚举倍数的方式可以知道存在若干段区间消耗同一精神状态的次数是相同的,那么区别就是其精神状态的差值。
那么可以用ST表维护精神状态次数的最大值和次大值,然后枚举倍数求出对于单个 \(x\) 的次数最大值次大值相减以求得最大值。
代码
#include <cstdio>
#include <cctype>
using namespace std;
const int N=200011; long long ans[N];
int lg[N],two[18],n,mx,h[N],a[N],f[N][18],g[N][18];
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
void print(long long ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
int main(){
lg[0]=-1,two[0]=1;
for (int i=1;i<N;++i) lg[i]=lg[i>>1]+1;
for (int i=1;i<=lg[N-1];++i) two[i]=two[i-1]<<1;
for (int T=iut();T;--T){
n=iut(),mx=0;
for (int i=1;i<=n;++i) h[i]=iut();
for (int i=1;i<=n;++i){
a[i]=iut();
if (mx<a[i]) mx=a[i];
}
for (int i=1;i<=n;++i)
if (h[f[a[i]][0]]<h[i]) g[a[i]][0]=f[a[i]][0],f[a[i]][0]=i;
else if (h[g[a[i]][0]]<h[i]) g[a[i]][0]=i;
for (int j=1;j<=lg[mx];++j)
for (int i=1;i+two[j]-1<=mx;++i){
f[i][j]=f[i+two[j-1]][j-1],g[i][j]=g[i+two[j-1]][j-1];
if (h[f[i][j]]<h[f[i][j-1]]) g[i][j]=f[i][j],f[i][j]=f[i][j-1];
else if (h[g[i][j]]<h[f[i][j-1]]) g[i][j]=f[i][j-1];
if (h[g[i][j]]<h[g[i][j-1]]) g[i][j]=g[i][j-1];
}
for (int i=1;i<=mx;++i){
int fi=0,se=0;
for (int j=1;j<=mx;j+=i){
int l=j,r=j+i>mx?mx:j+i-1,z=lg[r-l+1];
int Fi=f[r-two[z]+1][z],Se=g[r-two[z]+1][z];
if (h[Fi]<h[f[l][z]]) Se=Fi,Fi=f[l][z];
else if (Fi!=f[l][z]&&h[Se]<h[f[l][z]]) Se=f[l][z];
if (h[Se]<h[g[l][z]]) Se=g[l][z];
if ((a[fi]+i-1ll)/i*h[fi]<(a[Fi]+i-1ll)/i*h[Fi]) se=fi,fi=Fi;
else if ((a[se]+i-1ll)/i*h[se]<(a[Fi]+i-1ll)/i*h[Fi]) se=Fi;
if ((a[se]+i-1ll)/i*h[se]<(a[Se]+i-1ll)/i*h[Se]) se=Se;
}
long long _fi=(a[fi]+i-1ll)/i*h[fi],_se=(a[se]+i-1ll)/i*h[se];
if (ans[fi]<_fi-_se) ans[fi]=_fi-_se;
}
for (int i=1;i<=n;++i) print(ans[i]),putchar(i==n?10:32);
for (int i=0;i<=n;++i) ans[i]=0;
for (int i=1;i<=mx;++i) f[i][0]=g[i][0]=0;
}
return 0;
}
#ST表#CF1879F Last Man Standing的更多相关文章
- POJ3693 Maximum repetition substring [后缀数组 ST表]
Maximum repetition substring Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9458 Acc ...
- 【BZOJ-2006】超级钢琴 ST表 + 堆 (一类经典问题)
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2473 Solved: 1211[Submit][Statu ...
- 【BZOJ-3956】Count ST表 + 单调栈
3956: Count Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 173 Solved: 99[Submit][Status][Discuss] ...
- 【BZOJ-4569】萌萌哒 ST表 + 并查集
4569: [Scoi2016]萌萌哒 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 459 Solved: 209[Submit][Status] ...
- 【BZOJ-4310】跳蚤 后缀数组 + ST表 + 二分
4310: 跳蚤 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 180 Solved: 83[Submit][Status][Discuss] De ...
- HDU5726 GCD(二分 + ST表)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5726 Description Give you a sequence of N(N≤100, ...
- Hdu 5289-Assignment 贪心,ST表
题目: http://acm.hdu.edu.cn/showproblem.php?pid=5289 Assignment Time Limit: 4000/2000 MS (Java/Others) ...
- Bzoj 2006: [NOI2010]超级钢琴 堆,ST表
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2222 Solved: 1082[Submit][Statu ...
- ST表poj3264
/* ST表多次查询区间最小值 设 g[j][i] 表示从第 i 个数到第 i + 2 ^ j - 1 个数之间的最小值 类似DP的说 ans[i][j]=min (ans[i][mid],ans ...
- COJ 1003 WZJ的数据结构(三)ST表
WZJ的数据结构(三) 难度级别:B: 运行时间限制:3000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大小为N的 ...
随机推荐
- 变量,六大数据类型之字符串、列表、元祖----day02
1.变量:可以改变的量,实际具体指的是内存中的一块存储空间 (1)变量的概念 (2)变量的声明 (3)变量的命名 (4)变量的交换 *常量就是不可改变的量,python当中没有明确定义常量的关键字,所 ...
- java基础之StringBuilder---03
StringBuilder概述 StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容是可变的. 如果对字符串进行拼接操作, ...
- Simulink模型指标分析与模型重构的最佳实践 - 软件模型质量保证不可忽视的一环
在基于模型的开发中,优质的模型架构是生成优质代码的必要前提.静态模型分析对于模型的质量保证有着至关重要的作用,同时建模规范已在业内有着广泛而成熟的应用.然而建模规范并非模型设计原则合规性的唯一考量标准 ...
- [Node] nvm 安装 node 和 npm
Node JS 安装 安装 node version manager (nvm) Windows: https://github.com/coreybutler/nvm-windows/release ...
- TCP的链接和断开_wireShark实践
目录 准备 TCP连接的三次握手 WireShark验证 TCP的四次挥手 WireShark验证 状态解释 其他的 # 概述 终于到了学习总结时间了 准备 TCP连接的三次握手 转自https:/ ...
- Java 封装+构造器+this 小测试
1 package com.bytezero.account; 2 3 4 public class Account 5 { 6 private int id; //账号 7 private doub ...
- C++ //常用查找算法 find //自定义类型需要重载 ==
1 //常用查找算法 find 2 #include<iostream> 3 #include<algorithm> 4 #include<functional> ...
- Kafka的Controller
控制器组件(Controller),是 Apache Kafka 的核心组件.它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群.集群中任意一台 Broker ...
- Sagas论文原文读后总结
一.引子 分布式事务组件seata最近社区很活跃,刚好公司有对接seata的计划.刚好借此机会,彻底了解下seata的价值.其中有一个比较特殊的模式叫SAGA模式,听起来就很懵逼,按照官网的介绍起源于 ...
- 基于pythondetcp多个客户端连接服务器
壹: TCP是面向运输层的协议.使用TCP协议之前,必须先建立TCP连接,在传输完成后,必须释放已经建立的TCP连接.每条TCP连接只能有两个端,每一条TCP连接只能是点对点的.TCP提供可靠的交付的 ...