洛谷题面

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. etcd实现分布式锁分析

    3篇关于分布式锁的文章,可以结合看: consul实现分布式锁:https://www.cnblogs.com/jiujuan/p/10527786.html redis实现分布式锁:https:// ...

  2. 项目实战:C#上位机+arduino下位机+控制点亮LED灯

    前言   当前比较流行的arduino开发,联动做一个Demo.   应用构架   上位机:C#上位机通过串口发送接收控制协议,来控制下位机:  下位机:arduino下位机主控,接受上位机串口协议控 ...

  3. offline RL | 读读 Decision Transformer

    论文标题:Decision Transformer: Reinforcement Learning via Sequence Modeling,NeurIPS 2021,6 6 7 9 poster( ...

  4. 【Azure 云服务】Azure Cloud Service如何来设置固定IP地址(ReservedIP)

    问题描述 在云中环境,部署的应用到云服务(Cloud Service)都是动态的IP地址,所以在添加DNS记录的时候,都是使用CNAME,但如果需要在DNS中添加A记录,则需要一个固定IP. 解决方案 ...

  5. UserWarning: To get the last learning rate computed by the scheduler, please use `get_last_lr()`

    将 lr = scheduler.get_lr() 改为 lr = scheduler.get_last_lr()

  6. hbase报错ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet 采坑记

    1.错误异常信息: Exception in thread "main" java.lang.IllegalArgumentException: Failed to find me ...

  7. PlatformIO+esp32+添加自己的库(.c.h文件)

        什么都放main.c的话,很有可能堆积成屎山,所以我想给分开写,每个功能有自己的.c..h文件. 在lib下新建文件夹,例如led,再在里面分别建led.c.led.h; 写好内容后再main ...

  8. 单词本z ctrl shift alt - tr踩踏 shi流出 al不同

    单词本z ctrl shift alt ctrl = control = 控制 con = com = 一起 tr- = 踩 踏 - 原始印欧语形式为 *der- contra = 相对,相反(一起踩 ...

  9. vue-cli-plugin-electron-builder

    https://nklayman.github.io/vue-cli-plugin-electron-builder/guide/#installation 用cnpm安装 cnpm install ...

  10. Idea编译/运行Java程序慢

    修改前: 修改后: 参考: https://www.jjput.com/archives/macbookpro14m1mavenslowcompilation 问题 JDK尽量不要换版本 class ...