传送门

分析

一个比较神奇的思路

我们考虑分治,对于每一个区间[le,ri]我们计算这个区间中左端点属于[le,mid],右端点属于[mid+1,ri]的情况对答案的贡献

我们求左半个区间的最大最小值的后缀信息以及右半个区间的最大最小值的前缀信息

于是我们发现在左半面最大值越来越小、最小值越来越大,右半面反之

于是我们枚举左端点,并由这个点i找到它在右半个区间对应的p和q

p表示右面最靠左的大于premax[i]的点,q表示右面最靠左的小于premin[i]的点

然后我们分p<=q和p>q两种情况统计答案即可

注意为了方便起见我们提前处理右半个区间最大值、最小值、最大值乘最小值这三个值的前缀和信息

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
const int mod = ;
int n,a[],premin[],surmin[],premax[],surmax[],Ans;
int s1[],s2[],s3[];
inline void go(int le,int ri){
if(le==ri){
Ans=(Ans+(long long)a[le]*a[le]%mod)%mod;
return;
}
int i,mid=(le+ri)>>,p=mid+,q=mid+;
premin[mid]=premax[mid]=surmin[mid]=surmax[mid]=a[mid];
for(i=mid-;i>=le;i--){
premin[i]=min(premin[i+],a[i]);
premax[i]=max(premax[i+],a[i]);
}
for(i=mid+;i<=ri;i++){
surmin[i]=min(surmin[i-],a[i]);
surmax[i]=max(surmax[i-],a[i]);
}
s1[mid]=s2[mid]=s3[mid]=;
for(i=mid+;i<=ri;i++){
s1[i]=(s1[i-]+surmax[i])%mod;
s2[i]=(s2[i-]+surmin[i])%mod;
s3[i]=(s3[i-]+(long long)surmin[i]*surmax[i]%mod)%mod;
}
for(i=mid;i>=le;i--){
while(surmax[p]<premax[i]&&p<=ri)p++;
while(surmin[q]>premin[i]&&q<=ri)q++;
int tot=;
if(p<=q){
tot=(long long)(p-mid-)*premin[i]%mod*premax[i]%mod;
tot=(tot+(long long)premin[i]*((s1[q-]-s1[p-])%mod+mod)%mod)%mod;
tot=(tot+((s3[ri]-s3[q-])%mod+mod)%mod)%mod;
}else {
tot=(long long)(q-mid-)*premin[i]%mod*premax[i]%mod;
tot=(tot+(long long)premax[i]*((s2[p-]-s2[q-])%mod+mod)%mod)%mod;
tot=(tot+((s3[ri]-s3[p-])%mod+mod)%mod)%mod;
}
Ans=(Ans+tot)%mod;
}
go(le,mid),go(mid+,ri);
return;
}
int main(){
int i,j,k;
scanf("%d",&n);
for(i=;i<=n;i++)scanf("%d",&a[i]);
go(,n);
printf("%d\n",Ans);
return ;
}

EZOJ #77的更多相关文章

  1. window 10 用composer安装 基于 Laravel 5.3 的 Coaster CMS Curl错误77解决

    安装教程来自 http://laravelacademy.org/post/6547.html 1.系统环境windows 10 nodejs3.9.2 composer1.2.4(国内镜像) Cmd ...

  2. [stm32] 一个简单的stm32vet6驱动的天马4线SPI-1.77寸LCD彩屏DEMO

    书接上文<1.一个简单的nRF51822驱动的天马4线SPI-1.77寸LCD彩屏DEMO> 我们发现用16MHz晶振的nRF51822驱动1.77寸的spi速度达不到要求 本节主要采用7 ...

  3. [nRF51822] 1、一个简单的nRF51822驱动的天马4线SPI-1.77寸LCD彩屏DEMO

    最近用nRF51822写了个天马4线SPI的1.77寸LCD彩屏驱动,效果如下: 屏幕的规格资料为:http://pan.baidu.com/s/1gdfkr5L 屏幕的驱动资料为:http://pa ...

  4. 【hiho一下第77周】递归-减而治之 (MS面试题:Koch Snowflake)

    本题是一道微软面试题,看起来复杂,解出来会发现其实是一个很简单的递归问题,但是这道题的递归思路是很值得我们反复推敲的. 原题为hihocoder第77周的题目. 描述 Koch Snowflake i ...

  5. NYOJ题目77开灯问题

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsUAAAHXCAIAAADbX7BCAAAgAElEQVR4nO3dvVLrSMAm4L0Jci6E2B

  6. LeetCode39/40/22/77/17/401/78/51/46/47/79 11道回溯题(Backtracking)

    LeetCode 39 class Solution { public: void dfs(int dep, int maxDep, vector<int>& cand, int ...

  7. Scala 深入浅出实战经典 第77讲:模式匹配下的提取器动手构造实战

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  8. 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

    [源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...

  9. 20135306黄韧[2.72 2.77 3.70](http://i.cnblogs.com/EditPosts.aspx?opt=1)

    2.72 A.size_t是无符号整数,因此左边都会先转换为无符号整数,它肯定是大于等于0的. B.判断条件改为 if(maxbytes > 0 && maxbytes > ...

随机推荐

  1. mosquitto配置文件说明

    安装完成之后,所有配置文件会被放置于/etc/mosquitto/目录下,其中最重要的就是Mosquitto的配置文件,即mosquitto.conf,以下是详细的配置参数说明. # ======== ...

  2. Linux-Crontab服务

    1.安装并检查Crontab服务 检查cron服务: 检查Crontab工具是否安装:crontab -l 检查crond服务是否启动:service crond status 安装cron: yum ...

  3. 马拉车——模版+KMP——模版

    void Manacher(){ ;t[i];++i,len+=){ s[i<<]='#'; |]=t[i]-'A'+'a'; |]=t[i]; } s[len++]='#'; ,pos= ...

  4. nyoj-1016-德莱联盟(向量叉乘判断线段相交)

    叉乘的坐标表示: A(X1,Y1), B(X2, Y2), C(XC,YC), D(XD, YD);AB = (X2-X1, Y2-Y1);CD = (XD-XC, YD-YC); 向量AB,CD的叉 ...

  5. 机器学习敲门砖:任何人都能看懂的TensorFlow介绍

    机器学习敲门砖:任何人都能看懂的TensorFlow介绍 http://www.jiqizhixin.com/article/1440

  6. CodeForces - 150C :Smart Cheater (线段树,求最大连续区间)

    I guess there's not much point in reminding you that Nvodsk winters aren't exactly hot. That increas ...

  7. Long Jumps(二分查找lower_bound()函数的运用)

    Valery is a PE teacher at a school in Berland. Soon the students are going to take a test in long ju ...

  8. javascript之面试题精讲

    from:http://blog.csdn.net/q121516340/article/details/51332454 1,检测数组的几种方式: Array.isArray(); es5 toSt ...

  9. BZOJ3745:[COCI2015]Norma

    浅谈离线分治算法:https://www.cnblogs.com/AKMer/p/10415556.html 题目传送门:https://lydsy.com/JudgeOnline/problem.p ...

  10. bzoj 2242 [SDOI2011]计算器——BSGS模板

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242 第一道BSGS! 咳咳,我到底改了些什么?…… 感觉和自己的第一版写的差不多……可能是 ...