P8818 [CSP-S 2022] 策略游戏

news/2024/9/22 13:06:21

原题链接

学习笔记

感觉非常复杂?对于现在的我还是有深度的,首先第一个大坑就是并不需要真的求出c矩阵,这个题意就是让你在区间中选数,但要求乘积最大,所以要分讨。

你假定 \(a_i\ge0\),那这时如果 \(min(b_i)\ge0\)\(max(a_i)\),否则取 \(min(a_i\ge0)\),相反的,假定\(a_i<0\),那这时如果 \(max(b_i)\ge0\)\(max(a_i)\),否则取 \(max(a_i<0)\)

这就是贪心的思想,感觉非常有深度(菜),然后就需要维护6个ST表,非常糟糕啊,然后就没有然后了,你就慢慢维护去吧。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+10;int a[N],b[N],lg[N];
int n,m,q;int mxa[N][20];
int mia[N][20];
int rmxa[N][20];
int rmia[N][20];int mxb[N][20];
int mib[N][20];int main(){ios::sync_with_stdio(false);cin>>n>>m>>q;lg[1]=0;for(int i=2;i<=max(n,m);i++){lg[i]=lg[i>>1]+1;}for(int i=1;i<=n;i++){cin>>a[i];mxa[i][0]=mia[i][0]=a[i];rmia[i][0]=0<=a[i]?a[i]:INT_MAX;//正数中取最小,没正数取intmin标记为无 rmxa[i][0]=a[i]<0?a[i]:INT_MIN;//负数中取最大,没负数取intmax标记为无 }for(int i=1;i<=m;i++){cin>>b[i];mxb[i][0]=mib[i][0]=b[i];}for(int j=1;j<=lg[n];j++){for(int i=1;i<=n-(1<<j)+1;i++){int p=i+(1<<(j-1));mxa[i][j]=max(mxa[i][j-1],mxa[p][j-1]);rmxa[i][j]=max(rmxa[i][j-1],rmxa[p][j-1]);mia[i][j]=min(mia[i][j-1],mia[p][j-1]);rmia[i][j]=min(rmia[i][j-1],rmia[p][j-1]);}}for(int j=1;j<=lg[m];j++){for(int i=1;i<=n-(1<<j)+1;i++){int p=i+(1<<(j-1));mxb[i][j]=max(mxb[i][j-1],mxb[p][j-1]);mib[i][j]=min(mib[i][j-1],mib[p][j-1]);}}while(q--){int la,ra,lb,rb;cin>>la>>ra>>lb>>rb;int x=lg[ra-la+1],y=lg[rb-lb+1];int pa=ra-(1<<x)+1,pb=rb-(1<<y)+1;int mmxa=max(mxa[la][x],mxa[pa][x]);int rmmxa=max(rmxa[la][x],rmxa[pa][x]);int mmia=min(mia[la][x],mia[pa][x]);int rmmia=min(rmia[la][x],rmia[pa][x]);int mmxb=max(mxb[lb][y],mxb[pb][y]);int mmib=min(mib[lb][y],mib[pb][y]);long long ans=LONG_LONG_MIN;ans=max(ans,(ll)mmxa*(mmxa>=0?mmib:mmxb));ans=max(ans,(ll)mmia*(mmia>=0?mmib:mmxb));if(rmmxa!=INT_MIN){ans=max(ans,(ll)rmmxa*(rmmxa>=0?mmib:mmxb));} if(rmmia!=INT_MAX){ans=max(ans,(ll)rmmia*(rmmia>=0?mmib:mmxb));}cout<<ans<<"\n";}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/63314.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Nuxt Kit API :路径解析工具

title: Nuxt Kit API :路径解析工具 date: 2024/9/22 updated: 2024/9/22 author: cmdragon excerpt: 摘要:本文介绍了Nuxt Kit中用于解析路径的API工具,包括resolvePath、resolveAlias、findPath和createResolver。这些工具助力开发者处理模块路径、别名、文件扩展名,提…

使用GPU 加速 Polars:高效解决大规模数据问题

Polars 最近新开发了一个可以支持 GPU 加速计算的执行引擎。这个引擎可以对超过 100GB 的数据进行交互式操作能。本文将详细讨论 Polars 中DF的概念、GPU 加速如何与 Polars DF协同工作,以及使用新的 CUDA 驱动执行引擎可能带来的性能提升。 https://avoid.overfit.cn/post/b…

我的网站集成ElasticSearch初体验

最近,我给我的网站(https://www.xiandanplay.com/)尝试集成了一下es来实现我的一个搜索功能,因为这个是我第一次了解运用elastic,所以如果有不对的地方,大家可以指出来,话不多说,先看看我的一个大致流程 这里我采用的sdk的版本是Elastic.Clients.Elasticsearch, Ver…

Flipper Zero极客的便携式多功能工具设备

官网:Flipper Zero — 极客的便携式多功能工具设备 Flipper Zero是近两年比较热门的硬件工具,官方固件主要涵盖的功能为Sub-Ghz,125kHz,NFC,红外。 基本信息资料都可以在官方网站找到比较详细的文档解释。本篇主要是一个基础入门,这系列也是给自己学习此硬件一个上手研究…

C盘扩容免费工具

1.diskgenius 下载 https://www.diskgenius.cn/download.php 解压即可使用,无需安装 2.下载 安装Windows_PE环境 https://www.diskgenius.cn/help/windows_aik_adk_installnotes.php?Version=0A000000&Build=22631&Lang=936 官方软件,安全五毒 3.运行diskgenius ,点…

Leetcode 2464. 有效分割中的最少子数组数目

1.题目基本信息 1.1.题目描述 给定一个整数数组 nums。 如果要将整数数组 nums 拆分为 子数组 后是 有效的,则必须满足: 每个子数组的第一个和最后一个元素的最大公约数 大于 1,且 nums 的每个元素只属于一个子数组。 返回 nums 的 有效 子数组拆分中的 最少 子数组数目。如果…

debian 系统服务器搭建

在VMWare中安装Debian12.5虚拟机后, 需要开始进行一些设置:1. 先设置网络模式为桥接模式, 这样和主机在同一个局域网,方便后续ssh连接 2. 第1步设置后,重启Debian,登录后, 查看IP和Mac地址, 192.168.31.16,00:0c:29:6c:31:e6 3. 设置路由器,固定IP: 192.168.31.105。 …

初识算法

持续更新数据结构与算法专题,欢迎关注.......1.1 什么是算法? 定义 在数学和计算机科学领域,算法是一系列有限的严谨指令,通常用于解决一类特定问题或执行计算In mathematics and computer science, an algorithm (/ˈlɡərɪəm/) is a finite sequence of rigorous inst…