题解:

虽然知道有点问题但是并没有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]序列(未通过)的更多相关文章

  1. BZOj 4540: [Hnoi2016]序列 [莫队 st表 预处理]

    4540: [Hnoi2016]序列 题意:询问区间所有子串的最小值的和 不强制在线当然上莫队啦 但是没想出来,因为不知道该维护当前区间的什么信息,维护前后缀最小值的话不好做 想到单调栈求一下,但是对 ...

  2. 【LG3246】[HNOI2016]序列

    [LG3246][HNOI2016]序列 题面 洛谷 题解 60pts 对于每个位置\(i\),单调栈维护它往左第一个小于等于它的位置\(lp_i\)以及往右第一个小于它的位置\(rp_i\). 那么 ...

  3. 4540: [Hnoi2016]序列

    4540: [Hnoi2016]序列 https://www.lydsy.com/JudgeOnline/problem.php?id=4540 分析: 莫队+RMQ+单调栈. 考虑加入一个点后,区间 ...

  4. [BZOJ4540][HNOI2016]序列 莫队

    4540: [Hnoi2016]序列 Time Limit: 20 Sec  Memory Limit: 512 MB Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n ...

  5. BZOJ4540 Hnoi2016 序列 【莫队+RMQ+单调栈预处理】*

    BZOJ4540 Hnoi2016 序列 Description 给定长度为n的序列:a1,a2,-,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,-,ar- ...

  6. 【BZOJ4540】[Hnoi2016]序列 莫队算法+单调栈

    [BZOJ4540][Hnoi2016]序列 Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,a ...

  7. [Bzoj4540][Hnoi2016] 序列(莫队 + ST表 + 单调队列)

    4540: [Hnoi2016]序列 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1567  Solved: 718[Submit][Status] ...

  8. [HNOI2016]序列 CDQ+DP

    [HNOI2016]序列 CDQ 链接 loj 思路 一个点最小变为l,最大变为r,不变的时候为v 那么j能在i前面就要满足. \(j<i\) \(r[j]<=v[i]\) \(v[j]& ...

  9. 题解-[HNOI2016]序列

    题解-[HNOI2016]序列 [HNOI2016]序列 给定 \(n\) 和 \(m\) 以及序列 \(a\{n\}\).有 \(m\) 次询问,每次给定区间 \([l,r]\in[1,n]\),求 ...

  10. P6604 [HNOI2016]序列 加强版

    *I. P6604 [HNOI2016]序列 加强版 摘自学习笔记 简单树论 笛卡尔树部分例题 I. 和 P6503 比较类似.我们设 \(f_i\) 表示全局以 \(i\) 结尾的子区间的最小值之和 ...

随机推荐

  1. Spring MVC 源码分析

      Spring MVC SpringMVC中扮演关键角色的DispatcherServlet类. 1 DispatcherServlet 1.1DispatcherServlet 类图 1.2 初始 ...

  2. OOM之类、对象、实例、实体之辨析

    一.场景再现         有一个重要的概念你需要弄明白,那就是“类(class)”和“对象(object)”的区别.我用禅语来解释一下吧:         鱼和三文鱼有什么区别?         ...

  3. python的特殊方法介绍

    __repr__.__str__ __len__.__getitem__.__setitem__.__delitem__.__contains__ __iter__.__reversed__.__ne ...

  4. php ldap

    参考链接: http://blog.csdn.net/guoyuqi0554/article/details/11015403 http://blog.csdn.net/qk1992919/artic ...

  5. jquery 学习(四) - 标签 添加/删除/修改

    HTML代码 <div class="a1"> <div> <span id="a2">aaa</span> & ...

  6. SVN备份还原

    本文是对SVN备份还原的一个简单记录 /*千万不能用VisualSVN Server PowerShell,否则在还原Load的时候会发生错误E140001,具体参考http://stackoverf ...

  7. Servlet3.0的注解自定义原生Listener监听器实战

    简介:监听器介绍和Servlet3.0的注解自定义原生Listener监听器实战 自定义Listener(常用的监听器 servletContextListener.httpSessionListen ...

  8. 2018-2019-2 《网络对抗技术》Exp0 Kali安装 20165230

    2018-2019-2 <网络对抗技术>Exp0 Kali安装 20165230 一.下载kali 下载地址 下载Kali Linux 64 bit VMware VM版本 下载vmwar ...

  9. <crtdbg.h> 的作用

    1.在调试状态下让win程在输出窗口中显示调试信息,可以用_RPTn 宏n为显示参数比如_RPT0(_CRT_WARN,"text"); _RPT1(_CRT_WARN," ...

  10. Python 的 six模块简介

    Python 的 six模块简介 six : Six is a Python 2 and 3 compatibility library Six没有托管在Github上,而是托管在了Bitbucket ...