EZOJ #77
分析
一个比较神奇的思路
我们考虑分治,对于每一个区间[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的更多相关文章
- 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 ...
- [stm32] 一个简单的stm32vet6驱动的天马4线SPI-1.77寸LCD彩屏DEMO
书接上文<1.一个简单的nRF51822驱动的天马4线SPI-1.77寸LCD彩屏DEMO> 我们发现用16MHz晶振的nRF51822驱动1.77寸的spi速度达不到要求 本节主要采用7 ...
- [nRF51822] 1、一个简单的nRF51822驱动的天马4线SPI-1.77寸LCD彩屏DEMO
最近用nRF51822写了个天马4线SPI的1.77寸LCD彩屏驱动,效果如下: 屏幕的规格资料为:http://pan.baidu.com/s/1gdfkr5L 屏幕的驱动资料为:http://pa ...
- 【hiho一下第77周】递归-减而治之 (MS面试题:Koch Snowflake)
本题是一道微软面试题,看起来复杂,解出来会发现其实是一个很简单的递归问题,但是这道题的递归思路是很值得我们反复推敲的. 原题为hihocoder第77周的题目. 描述 Koch Snowflake i ...
- NYOJ题目77开灯问题
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsUAAAHXCAIAAADbX7BCAAAgAElEQVR4nO3dvVLrSMAm4L0Jci6E2B
- 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 ...
- Scala 深入浅出实战经典 第77讲:模式匹配下的提取器动手构造实战
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性
[源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...
- 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 > ...
随机推荐
- CANopenSocket CANopenCommand.c hacking
/***************************************************************************** * CANopenSocket CANop ...
- RedHat 6.8 内核编译
/*************************************************************************** * RedHat 6.8 内核编译 * 说明: ...
- redhat5.8 alt+ctrl+f1 黑屏
/********************************************************************** * redhat5.8 alt+ctrl+f1 黑屏 * ...
- SQL夯实基础(二):连接操作中使用on与where筛选的差异
一.on筛选和where筛选 在连接查询语法中,另人迷惑首当其冲的就要属on筛选和where筛选的区别了,如果在我们编写查询的时候, 筛选条件的放置不管是在on后面还是where后面, 查出来的结果总 ...
- bzoj 3907 网格 bzoj2822 [AHOI2012]树屋阶梯——卡特兰数(阶乘高精度模板)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3907 https://www.lydsy.com/JudgeOnline/problem.p ...
- vs2013-zlib1.2.8编译使用
1.编译步骤 a.先用vs2013命令行执行下bld_ml32.bat批处理 b.将inffas32.obj和match686.obj复制到目录zlib128\zlib-1.2.8 c.打开zlib- ...
- gitlab init project
Command line instructions Git global setup git config --global user.name "zxpo" git config ...
- L2-014. 列车调度(set的使用,最长递增子序列)
L2-014. 列车调度 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 火车站的列车调度铁轨的结构如下图所示. Figure ...
- 天梯L2-001. 紧急救援(25分)
L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...
- Byte和byte[]数组
Byte和byte[]数组,“表示一个 8 位无符号整数, 一般为8位二进制数”. Byte是计算机最基础的存储单位和最基础的通讯单位. 而所有的类型都是支持由byte[]类型转换而来. 为什么说By ...