首页 > 其他分享 >Nanami and the Last Enigma (hard version)

Nanami and the Last Enigma (hard version)

时间:2024-07-01 17:32:11浏览次数:1  
标签:va Last cl int hard long ++ Nanami cr

  • 如果从前缀和的视角考察题目中需要统计的信息,那么子段和=x等价于s[r]-s[l-1]=x
  • 于是我们虽然不能O(1)地求出w(l,r),但是可以O(1)地将已知的w(l,r)扩展
  • w(l,r)是一个非常明显的满足“包含大于等于交叉”的四边形不等式的函数,除此之外,通过打表找规律,也可以发现DP有决策单调性
  • 决策单调性优化有两种形式:分治法和单调队列法,由于本题中w(l,r)不能O(1)地求出,因此我们选择分治法
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int a[100005],s[100005];
long long f[100005][25],va,cl,cr;
int x;
unordered_map<int,int>q;
long long val(int l,int r)
{
	while(l<cl)
	{
		cl--;
		va+=q[x+s[cl-1]];
		q[s[cl-1]]++;
	}
	while(r>cr)
	{
		cr++;
		va+=q[s[cr]-x];
		q[s[cr]]++;
	}
	while(l>cl)
	{
		q[s[cl-1]]--;
		va-=q[x+s[cl-1]];
		cl++;
	}
	while(r<cr)
	{
		q[s[cr]]--;
		va-=q[s[cr]-x];
		cr--;
	}
	return va;
}
void calc(int l,int r,int j,int jl,int jr)
{
	if(l>r)
	{
		return;
	}
	int p;
	int mid=(l+r)>>1;
	for(int i=min(mid-1,jr);i>=jl;i--)
	{
		long long va=val(i+1,mid);
		if(f[i][j-1]+va<f[mid][j])
		{
			p=i;
			f[mid][j]=f[i][j-1]+va;
		}
	}
	calc(l,mid-1,j,jl,p);
	calc(mid+1,r,j,p,jr);
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n,k;
	cin>>n>>k>>x;
	s[0]=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		s[i]=s[i-1]+a[i];
	}
	memset(f,0x3f,sizeof(f));
	f[0][0]=0;
	cl=1,cr=0;
	q[0]++;
	for(int i=1;i<=n;i++)
	{
		f[i][1]=val(1,i);
	}
	for(int j=2;j<=k;j++)
	{
		calc(j,n,j,j-1,n); 
	}
	cout<<f[n][k]<<endl;
	return 0;
}

标签:va,Last,cl,int,hard,long,++,Nanami,cr
From: https://www.cnblogs.com/watersail/p/18278501

相关文章

  • Elasticsearch:Painless scripting 语言(二)
    这是继上一篇文章“Elasticsearch:Painlessscripting语言(一)”的续篇。使用field API访问文档中的字段警告:FieldAPI仍在开发中,应视为测试版功能。API可能会发生变化,此迭代可能不是最终状态。有关功能状态,请参阅#78920。使用field API访问文档字段:field('my_......
  • 2713. 矩阵中严格递增的单元格数 Hard
    给你一个下标从 1 开始、大小为 mxn 的整数矩阵 mat,你可以选择任一单元格作为 起始单元格 。从起始单元格出发,你可以移动到 同一行或同一列 中的任何其他单元格,但前提是目标单元格的值 严格大于 当前单元格的值。你可以多次重复这一过程,从一个单元格移动到另一......
  • OPenFast中AeroDyn,ElastoDyn,ElastoDyn_Tower,ServoDyn的作用!
    在OpenFAST中,这四个文件分别有不同的作用,它们用于定义风力涡轮机不同部分的特性和行为。以下是每个文件的总结及其作用:NRELOffshrBsline5MW_Onshore_AeroDyn15.dat作用:这是AeroDyn模块的输入文件,用于定义风力涡轮机的空气动力学特性。内容:包括风力涡轮机叶片的空气动力......
  • [题解]CF1732C2 Sheikh (Hard Version)
    思路首先证明一下当序列扩大时答案一定不劣。考虑\(f(l,r)\)到\(f(l,r+1)\)的变化。\[\begin{aligned}f(l,r)-f(l,r+1)&=s_{l,r}-xs_{l,r}-s_{l,r+1}+xs_{l,r+1}\\&=xs_{l,r+1}-xs_{l,r}-a_{r+1}\\&......
  • .Net Core8下Elasticsearch7.x+Nest升级到Elasticsearch8.x+Elastic.Clients.Elastics
    背景Elasticsearch升级到8.11了,对应的客户端插件也跟着升级,以为会兼容Nest的语法,发现自己TooYoungTooSimple!没办法,只能去官网找,结果官网只有最基本的增、删、改、查,只能继续查资料,发现网上资料很少,避免大家少走弯路,这里做个简单的分享。分享1.ElasticsearchClientvaresS......
  • elasticsearch 全文搜素 query_string 搭配其他条件
    elasticsearch全文搜素query_string搭配其他条件{"query":{"bool":{"must":[{"term":{"item_type":"question"......
  • 实战教你ElasticSearch-8.13集群搭建
    elasticsearch8.13集群部署elasticsearch8.13analysis-ikelastiknn环境准备(每台节点都需要修改)修改系统参数-----https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html(官方推荐)#vim/etc/security/limits.conf新增内容如下:*har......
  • 【微服务】第24节:初识搜索引擎 ElasticSearch
    目录1.初识elasticsearch1.1.认识和安装1.1.1.安装elasticsearch1.1.2.安装Kibana1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排1.3.基础概念1.3.1.文档和字段1.3.2.索引和映射1.3.3.mysql与elasticsearch1.4.IK分词器1.4.1.安装IK分词器1.4.2.使......
  • elasticsearch-7.17.15 集群安装部署及kibana配置
    一、物料准备(注意:必须版本一致):1、安装包 elasticsearch-7.17.15-linux-x86_64.tar.gz(这个版本的插件需要在线使用命令安装:/es/elasticsearch-7.17.15/bin/elasticsearch-plugininstallhttps://get.infini.cloud/elasticsearch/analysis-ik/7.17.15,或者用我的传送门) an......
  • Elasticsearch
    Elasticsearch(ES),这是一个开源的搜索和分析引擎,广泛用于各种应用中以实现全文搜索、结构化搜索、分析和复杂的数据查询。下面我将详细介绍Elasticsearch的基本概念、架构和工作原理。Elasticsearch的基本概念节点(Node)Elasticsearch运行的单个实例称为节点。每个节点都存储数据,并......