题解:

虽然知道有点问题但是并没有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. ATS metric query

    ATS metric query 参考:ATS metric query proxy.node.cache_hit_mem_ratio proxy.node.cache_hit_mem_ratio_a ...

  2. JAVA通过继承线性表来实现有序表

    1,对于线性表而言,里面的元素是无序的,可以随意地将新元素增加到线性表中而不需要考虑该元素在线性表中的位置.但是,对于有序表而言,其中的元素是按照某种方式进行排序的,因此在有序表中插入元素时,需要按照 ...

  3. u-boot移植(八)---代码修改---存储控制器--MMU

    一.MMU介绍 1.1 虚拟地址与物理地址 建立两个应用程序,hello1.c和hello2.c,然后运行: hello1.c hello2.c 运行结果如下: 可以看到两个结果打印的地址是一样的,都 ...

  4. .net 重新注册

    今天同事问 一个IIS 的监控站点 .net 出现问题:对于windows 一般都停留在重启生效思想:然并没有生效: 于是建议重新注册.NET : 一般出现原因: 在默认安装路径 重启注册: 默认的安 ...

  5. luogu P1593 因子和

    不要吐槽博主总做这些数论氵题 首先我们看到这种因数问题,果断质因数分解 所以当前数\(a=p_1^{k_1}*p_2^{k_2}...*p_m^{k_m}\) 可得\(a^b=p_1^{k_1*b}* ...

  6. 2、Saltstack的数据系统

      一.Grains grains是salt用来收集minion端底层系统信息的接口.比如,操作系统type.域名 .IP地址.内存及其他相关系统属性信息等.存储在minion端,用于保存minion ...

  7. K - Find them, Catch them POJ - 1703 (带权并查集)

    题目链接: K - Find them, Catch them POJ - 1703 题目大意:警方决定捣毁两大犯罪团伙:龙帮和蛇帮,显然一个帮派至少有一人.该城有N个罪犯,编号从1至N(N<= ...

  8. python - classs内置方法 solt

    solt # __solt__ # 是一个类变量,变量值可以是列表.元组或者是可迭代对象,也可以是一个字符串 # (以为这所有实例只有一种数据属性) # # 作用:(为了节省内存空间,减少过多的实例属 ...

  9. adb查看安卓设备系统Android版本

    adb shell getprop "ro.build.version" 结果中如下两项便是版本信息: [ro.build.version.release]: [4.4.4][ro ...

  10. java工程师之旅-一个月工作心得

    不知不觉,在工作中已经度过一个月,距离上次写文章已经好几个月了,正好还有二十分钟下班,抽点时间来写一下博文,写一下心得. 首先说一下,在我工作之前,做了一个项目,和一个外校大四的学生做一个毕业设计,一 ...