[HNOI2016]序列(未通过)
题解:
虽然知道有点问题但是并没有debug出来
发现错误了。。相同元素的处理有错误
网上题解大都是分块。。(hn怎么道道分块)
用最普通的思路,可以枚举每个点作为最小值,向左向右延伸
但是多组询问显然我们是要去优化询问过程的
有一种方法就是先找出最大值
(其实也可以是随意一个位置吧,但yy一下应该最大值能扩展的比较快)
然后向两边分别找第一个比它小的值
那么我们会发现,中间这一段元素他们一定是小于两边的值的
也就是说,如果这两个点在区间里,中间的点也全部在区间里
那么就可以用前缀和来预处理了
当比它小的点已经超出边界的时候,显然是可以递归处理的
查找最大值用倍增维护一下(线段树多了个log)
时间复杂度在数据不随机的情况下大概会炸的
并没有ac的代码:
#include <bits/stdc++.h>
using namespace std;
#define maxn 100100
#define INF 1e9
#define ll long long
ll h,t,n,m;
ll v[maxn],dp1[maxn],dp2[maxn],sum[maxn];
struct re{
ll h,t,pos,x;
}p[maxn*];
struct ree{
ll x1,x2;
}bz1[][maxn];
ll pd1(ll x,ll y)
{
if (v[x]>=v[y]) return(y);
else return(pd1(x,dp1[y]));
}
ll pd2(ll x,ll y)
{
if (v[x]>=v[y]) return(y);
else return(pd2(x,dp2[y]));
}
void updata(ll x)
{
p[x].x=max(p[x*].x,p[x*+].x);
if (p[x*].x>p[x*+].x)
p[x].pos=p[x*].pos;
else p[x].pos=p[x*+].pos;
}
int query(int h,int t)
{
int x=log2(t-h+),ans;
ree a=bz1[x][h],b=bz1[x][t-(<<x)+];
if (a.x1<b.x1) ans=b.x2; else ans=a.x2;
return(ans);
}
ll js(ll x,ll h,ll t)
{
return(v[x]*(min(dp2[x],t+)-x)*(x-max(dp1[x],h-)));
}
ll queryall(ll h,ll t)
{
if (h>t) return();
ll ans=,tmp,x;
tmp=x=query(h,t);
ans+=js(x,h,t);
while (dp2[x]<=t)
{
ans+=sum[dp2[x]-]-sum[x];
x=dp2[x];
ans+=js(x,h,t);
}
ans+=queryall(x+,t); x=tmp;
while (dp1[x]>=h)
{
ans+=sum[x-]-sum[dp1[x]];
x=dp1[x];
ans+=js(x,h,t);
}
ans+=queryall(h,x-);
return(ans);
}
int main()
{
freopen("noip.in","r",stdin);
freopen("noip.out","w",stdout);
std::ios::sync_with_stdio(false);
cin>>n>>m;
v[]=-INF; v[n+]=-INF;
for (ll i=;i<=n;i++) cin>>v[i];
for (ll i=;i<=n;i++)
{
dp1[i]=pd1(i,i-);
}
for (ll i=n;i>=;i--)
{
dp2[i]=pd2(i,i+);
}
for (int i=;i<=n;i++)
bz1[][i].x1=v[i],bz1[][i].x2=i;
for (int i=;i<=;i++)
for (int j=;j<=n;j++)
if (j+(<<i)-<=n)
{
ree a=bz1[i-][j],b=bz1[i-][j+(<<(i-))];
if (a.x1>b.x1) bz1[i][j].x1=a.x1,bz1[i][j].x2=a.x2;
else bz1[i][j].x2=b.x1,bz1[i][j].x2=b.x2;
}
for (ll i=;i<=n;i++)
{
sum[i]=
sum[i-]+(i-dp1[i])*(dp2[i]-i)*v[i];
}
for (ll i=;i<=m;i++)
{
cin>>h>>t;
cout<<queryall(h,t)<<endl;
}
}
[HNOI2016]序列(未通过)的更多相关文章
- BZOj 4540: [Hnoi2016]序列 [莫队 st表 预处理]
4540: [Hnoi2016]序列 题意:询问区间所有子串的最小值的和 不强制在线当然上莫队啦 但是没想出来,因为不知道该维护当前区间的什么信息,维护前后缀最小值的话不好做 想到单调栈求一下,但是对 ...
- 【LG3246】[HNOI2016]序列
[LG3246][HNOI2016]序列 题面 洛谷 题解 60pts 对于每个位置\(i\),单调栈维护它往左第一个小于等于它的位置\(lp_i\)以及往右第一个小于它的位置\(rp_i\). 那么 ...
- 4540: [Hnoi2016]序列
4540: [Hnoi2016]序列 https://www.lydsy.com/JudgeOnline/problem.php?id=4540 分析: 莫队+RMQ+单调栈. 考虑加入一个点后,区间 ...
- [BZOJ4540][HNOI2016]序列 莫队
4540: [Hnoi2016]序列 Time Limit: 20 Sec Memory Limit: 512 MB Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n ...
- BZOJ4540 Hnoi2016 序列 【莫队+RMQ+单调栈预处理】*
BZOJ4540 Hnoi2016 序列 Description 给定长度为n的序列:a1,a2,-,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,-,ar- ...
- 【BZOJ4540】[Hnoi2016]序列 莫队算法+单调栈
[BZOJ4540][Hnoi2016]序列 Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,a ...
- [Bzoj4540][Hnoi2016] 序列(莫队 + ST表 + 单调队列)
4540: [Hnoi2016]序列 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1567 Solved: 718[Submit][Status] ...
- [HNOI2016]序列 CDQ+DP
[HNOI2016]序列 CDQ 链接 loj 思路 一个点最小变为l,最大变为r,不变的时候为v 那么j能在i前面就要满足. \(j<i\) \(r[j]<=v[i]\) \(v[j]& ...
- 题解-[HNOI2016]序列
题解-[HNOI2016]序列 [HNOI2016]序列 给定 \(n\) 和 \(m\) 以及序列 \(a\{n\}\).有 \(m\) 次询问,每次给定区间 \([l,r]\in[1,n]\),求 ...
- P6604 [HNOI2016]序列 加强版
*I. P6604 [HNOI2016]序列 加强版 摘自学习笔记 简单树论 笛卡尔树部分例题 I. 和 P6503 比较类似.我们设 \(f_i\) 表示全局以 \(i\) 结尾的子区间的最小值之和 ...
随机推荐
- Linux_安装
总结: 分区-->格式化-->起一个设备文件名(逻辑分区一定从5开始)-->指定挂载点(必须是空的目录名称作为盘幅)
- .NET面试题系列(十二)Dictionary原理
序言 Dictionary Dictionary的开发人员都了解,和List相比,字典添加会慢,但是查找会比较快. Dictionary的本质 --- 两个数组.这是典型的用空间换取时间的做法. 先来 ...
- luogu P4161 [SCOI2009]游戏
传送门 我们发现整个大置换中,会由若干形如\((a_1\rightarrow a_2,a_2\rightarrow a_3,...a_{n-1}\rightarrow a_n,a_n\rightarr ...
- luogu P2900 [USACO08MAR]土地征用Land Acquisition
写这道题时,预处理部分少打了等号,吓得我以为斜率优化错了或者被卡精了 mmp 首先有一个很明显的结论(逃),就是一个土地如果长(\(x\))与宽(\(y\))都比另一个土地小,那么这个土地一定可以跟那 ...
- MGR架构~单写模式架构的搭建
一 简介 :MGR一直没有时间测试,今天咱们来初步了解搭建一下呗 二 环境: mysql5.7.20 单台机器 启动三实例 三 mysql 搭建: 1 建立相关目录+ mkdir -p /data ...
- oracle新建对象 权限管理
代码 CREATE USER target IDENTIFIED BY target ; GRANT CONNECT, RESOURCE TO target; 刚刚创建的oracle实例中会内建两个用 ...
- System.Runtime.InteropServices.COMException (0x800A03EC): 无法访问文件
使用Microsoft.Office.Interop.Excel 操作 今天在服务器部署,操作程序csv文件转xsl文件的时候,遇到一下问题: System.Runtime.InteropServic ...
- 【转】使用SevenZipSharp压缩、解压文件
引用 下载之后引用“SevenZipSharp.dll”至项目中,然后将“7z.dll”放到bin目录下,或者这样引用:SevenZipCompressor.SetLibraryPath(" ...
- bat判断ini文件内容
@echo off for /f "tokens=1" %%d in (config.ini) do ( if /I "%%d" equ "path= ...
- saltStack的event接口通过mysql数据库接收SaltStack批量管理日志
event是一个本地的ZeroMQ PUB Interface,event是一个开放的系统,用于发送信息通知salt或其他的操作系统.每个event都有一个标签.事件标签允许快速制定过滤事件.除了标签 ...