洛谷题面

CF1879F


分析

当 \(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的更多相关文章

  1. POJ3693 Maximum repetition substring [后缀数组 ST表]

    Maximum repetition substring Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9458   Acc ...

  2. 【BZOJ-2006】超级钢琴 ST表 + 堆 (一类经典问题)

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2473  Solved: 1211[Submit][Statu ...

  3. 【BZOJ-3956】Count ST表 + 单调栈

    3956: Count Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 173  Solved: 99[Submit][Status][Discuss] ...

  4. 【BZOJ-4569】萌萌哒 ST表 + 并查集

    4569: [Scoi2016]萌萌哒 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 459  Solved: 209[Submit][Status] ...

  5. 【BZOJ-4310】跳蚤 后缀数组 + ST表 + 二分

    4310: 跳蚤 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 180  Solved: 83[Submit][Status][Discuss] De ...

  6. HDU5726 GCD(二分 + ST表)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5726 Description Give you a sequence of N(N≤100, ...

  7. Hdu 5289-Assignment 贪心,ST表

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=5289 Assignment Time Limit: 4000/2000 MS (Java/Others) ...

  8. Bzoj 2006: [NOI2010]超级钢琴 堆,ST表

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2222  Solved: 1082[Submit][Statu ...

  9. ST表poj3264

      /* ST表多次查询区间最小值 设 g[j][i] 表示从第 i 个数到第 i + 2 ^ j - 1 个数之间的最小值 类似DP的说 ans[i][j]=min (ans[i][mid],ans ...

  10. COJ 1003 WZJ的数据结构(三)ST表

    WZJ的数据结构(三) 难度级别:B: 运行时间限制:3000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大小为N的 ...

随机推荐

  1. Notepad++找回自动保存缓存内容的文件

    在目录C:\Users\Administrator\AppData\Roaming\Notepad++\backup中找到自动保存的缓存文件. 参考Notepad++找回自动保存缓存内容的文件

  2. LayUI框架应用常见问题

    https://layui.itze.cn/index.html LayUI框架文档主页 获取URL参数 诸如表格中的"编辑","详情"工具按钮,需要在弹出层页 ...

  3. 【Azure Function App】遇见无法加载Microsoft.Azure.WebJobs.ParameterBindingData的问题

    问题描述 新部署Azure Funciton代码,遇见无法加载 "Microsoft.Azure.WebJobs.ParameterBindingData" 问题 错误消息:Mic ...

  4. 【Azure 环境】Azure Key Vault 采用自签名证书,是否需要CA provider

    关于 Azure Key Vault 证书,密钥保管库证书支持适用于 x509 证书管理,它提供以下行为: 允许证书所有者通过密钥保管库创建过程或通过导入现有证书来创建证书. 包括自签名证书和证书颁发 ...

  5. TLS数据包重组

    TLS解密 参考以下链接:Wireshark 解密 TLS报文_在线tls解密-CSDN博客 总结: 配置环境变量 wireshark首选项配置 TLS解密例子 Frame 2700 Frame 27 ...

  6. .NET 全能 Cron 表达式解析库(支持 Cron 所有特性)

    前言 今天大姚给大家分享一个.NET 全能 Cron 表达式解析类库,支持 Cron 所有特性:TimeCrontab. Cron表达式介绍 Cron表达式是一种用于配置定时任务的时间表达式.它由一系 ...

  7. Python项目维护不了?可能是测试没到位。Django的单元测试和集成测试初探

    前言 好久没搞 Django 了,最近维护一个我之前用 Django 开发的项目竟然有亲切的感觉 测试,在以前确实是经常被忽略的话题,特别是对于 Python Web 这种快速开发框架,怎么敏捷怎么来 ...

  8. Thinkphp6 自定义命令创建类文件

    以创建控制器为例 1.先通过 think 命令创建一个make文件,效果如下图: php think make:command make/MyController 2.修改上面创建的文件[MyCont ...

  9. 摆脱鼠标系列 - vscode - 页内 Ctrl + F 搜索完 回车下一个,选到后按 Esc退回到编辑状态

    为什么 这个很基础,但是没有细细整理 摆脱鼠标系列 - vscode - 页内 Ctrl + F 搜索完 回车下一个,选到后按 Esc退回到编辑状态 之前还找了个快捷键 Alt + Enter,发现冲 ...

  10. vue-helper 导致找到2个函数定义,跳转需要多点一下,禁用vue-helper即可

    vue-helper 导致找到2个函数定义,跳转需要多点一下,禁用vue-helper即可