题意:给定数组a[],求区间个数,满足区间的数各不同,而且满足maxval-len<=K;

思路:一看就可以分治做,对于当前的区间,从max位置分治。 对于这一层,需要高效的统计答案,那么对短的一边开始统计。

(这个过程很像启发式的逆过程,所以叫做启发式分治

1,对于数不同,这个可以预处理前缀和后缀的最大区间长度A[],B[]。

2,st表得到区间最大值位置,然后就可以搞了。

如果是第一次遇到,可以参考同一类的题目:

2019牛客暑期多校训练营(第三场)G: Removing Stones(启发式分治)

Non-boring sequences(启发式分治)

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int a[maxn],st[maxn][],lg[maxn],K,N; ll ans;
int A[maxn],B[maxn],vis[maxn];
int get(int L,int R)
{
int k=lg[R-L+];
return a[st[L][k]]>=a[st[R-(<<k)+][k]]?st[L][k]:st[R-(<<k)+][k];
}
void solve(int L,int R)
{
if(L>R) return ;
int pos=get(L,R);
if(pos-L<R-pos){
rep(i,L,pos){
int t=a[pos]-K,lR=i+t-;
int fcy=min(R,B[i]);
lR=max(lR,pos);
if(lR>fcy) continue;
ans+=fcy-lR+;
}
}
else {
rep(i,pos,R){
int t=a[pos]-K,rL=i-t+;
int fcy=max(L,A[i]);
rL=min(rL,pos);
if(rL<fcy) continue;
ans+=rL-fcy+;
}
}
solve(L,pos-); solve(pos+,R);
}
int main()
{
int T;
lg[]=-; rep(i,,maxn-) lg[i]=lg[i>>]+;
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&K); ans=;
rep(i,,N) scanf("%d",&a[i]);
rep(i,,N) st[i][]=i;
rep(i,,) {
rep(j,,N+-(<<i))
st[j][i]=a[st[j][i-]]>=a[st[j+(<<(i-))][i-]]?st[j][i-]:st[j+(<<(i-))][i-];
} rep(i,,N) vis[i]=; A[]=; vis[a[]]=;
rep(i,,N){
if(vis[a[i]]) A[i]=max(A[i-],vis[a[i]]+);
else A[i]=A[i-];
vis[a[i]]=i;
}
rep(i,,N) vis[i]=; B[N]=N; vis[a[N]]=N;
for(int i=N-;i>=;i--){
if(vis[a[i]]) B[i]=min(B[i+],vis[a[i]]-);
else B[i]=B[i+];
vis[a[i]]=i;
}
solve(,N);
printf("%lld\n",ans);
}
return ;
}

HDU6701:Make Rounddog Happy(启发式分治)的更多相关文章

  1. Make Rounddog Happy(2019年杭电多校第十场1011+HDU6701+启发式分治)

    目录 题目链接 题意 思路 代码 题目链接 传送门 题意 求有多少个子区间满足\(a_l,a_{l+1},\dots,a_r\)均不相同且\(max(a_l,a_{l+1},\dots,a_r)-(r ...

  2. hdu-6701 Make Rounddog Happy

    题目链接 Make Rounddog Happy Problem Description Rounddog always has an array a1,a2,⋯,an in his right po ...

  3. Removing Stones(2019年牛客多校第三场G+启发式分治)

    目录 题目链接 题意 思路 代码 题目链接 传送门 题意 初始时有\(n\)堆石子,每堆石子的石子个数为\(a_i\),然后进行游戏. 游戏规则为你可以选择任意两堆石子,然后从这两堆中移除一个石子,最 ...

  4. 2019牛客暑期多校训练营(第三场)G: Removing Stones(启发式分治)

    题意:给定N,表示N堆石子,每堆石子数为a[],问多少个区间,可以满足“石子总和若为偶数,那么可以两两取来自不同堆的石子,直到取完: 如果为奇数,那么排除其中一个,然后可以两两取来自不同堆的石子,直到 ...

  5. 启发式分治:2019牛客多校第三场 G题 Removing Stones

    问题可以转换为求有多少个区间数字的总和除2向下取整大于等于最大值.或者解释为有多少个区间数字的总和大于等于最大值的两倍(但是若区间数字总和为奇数,需要算作减1) 启发式分治: 首先按最大值位置分治,遍 ...

  6. BZOJ 4059 [Cerc2012]Non-boring sequences(启发式分治)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4059 [题目大意] 一个序列被称为是不无聊的,仅当它的每个连续子序列存在一个独一无二的 ...

  7. Non-boring sequences(启发式分治)

    题意:一个序列被称作是不无聊的,当且仅当,任意一个连续子区间,存在一个数字只出现了一次,问给定序列是否是不无聊的. 思路:每次找到一个只出现了一次的点,其位置的pos,那么继续分治[L,pos-1], ...

  8. BZOJ 4059: [Cerc2012]Non-boring sequences(启发式分治)

    传送门 解题思路 首先可以想到要预处理一个\(nxt_i\)和\(pre_i\),表示前后与当前位置权值相同的节点,那么这样可以迅速算出某个点在某段区间是否出现多次.然后这样的话就考虑分治,对于\([ ...

  9. 【题解】P4755 Beautiful Pair(启发式合并的思路+分治=启发式分治)

    [题解]P4755 Beautiful Pair upd: 之前一个first second烦了,现在AC了 由于之前是直接抄std写的,所以没有什么心得体会,今天自己写写发现 不知道为啥\(90\) ...

随机推荐

  1. webstorm创建js文件时自动生成js注释

    设置webstorm创建js文件时自动生成js注释 settings--Editor--File and Code Temlates 黑色框框里的内容自己填写上去,以下是参考的代码块: /** * @ ...

  2. Windows下安装 Linux 下vim编辑器

    Windows下安装vim编辑器 下载传送门 https://vim.en.softonic.com/download# 开始安装 这是下载后的可执行文件 双击(或单击)运行软件,选择同意继续进行安装 ...

  3. JavaSE 面试题: 成员变量与局部变量

    JavaSE 面试题 成员变量与局部变量 public class Test { static int s; int i; int j; { int i = 1; i++; j++; s++; } p ...

  4. 第二节:EF Core的常规“增删改”及状态的变化

    一. 整体说明 1. 本节用到的表 2. 状态说明补充 ①.Detached: 游离的状态,与数据库没有什么交涉,比如新new一个实体,状态就是Detached. ②.Added: 增加的状态. ③. ...

  5. Springboot Actuator之五:Springboot中的HealthAggregator、新增自定义Status

    springboot的actuator内置了/health的endpoint,很方便地规范了每个服务的健康状况的api,而且HealthIndicator可以自己去扩展,增加相关依赖服务的健康状态,非 ...

  6. .Net Core3.0使用gRPC 和IdentityServer4

    gRPC是什么gRPC是可以在任何环境中运行的现代开源高性能RPC框架.它可以通过可插拔的支持来有效地连接数据中心内和跨数据中心的服务,以实现负载平衡,跟踪,运行状况检查和身份验证.它也适用于分布式计 ...

  7. React实例------红绿灯

    概述 一个react的demo的实例,适合初学react的新手练习. 效果 用webpack打包后的目录结构 index.html react的封装,复用与Java的类似,面向对象的编程思想.所以in ...

  8. WebAPI 权限控制解决方案——Phenix.NET企业应用软件快速开发平台.使用指南.21.WebAPI服务(三)

    21.1   数据服务 21.1.1基本操作功能 Phenixヾ的数据服务,提供了如下的基本操作: 功能 Type URI 参数 完整获取实体集合对象 GET api/Data 分页获取实体集合对象 ...

  9. 前端自动显示信息的小demo

    效果: //来到这个页面立即请求,展示客户公司名称 $(function () { $.ajax({ type:"GET", url:"${pageContext.req ...

  10. 解决Spring Boot 从1.x升级到 2.x 后 单点登陆(SSO)问题

    解决Spring Boot 从1.x升级到 2.x 后 单点登陆(SSO)问题   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring S ...