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 > ...
随机推荐
- BEC translation exercise 2
Forest fires are a regular feature of Chile's hot, arid summers.智利夏天炙热.干燥,常发生森林火灾.A nearly decade-lo ...
- python中join函数用法
str.join(list/tuple/dict/string) str = "-"; seq = ("a", "b", "c&q ...
- hdu1085 Holding Bin-Laden Captive!(母函数)
简单的母函数应用. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstrin ...
- N!的阶乘附带简单大整数类的输入输出(暂时没有深入的了解)
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! 我的思路:就想着大整数类去了,才发现自己还不能很好的掌握,其实这是一个大 ...
- LeetCode Count Binary Substrings
原题链接在这里:https://leetcode.com/problems/count-binary-substrings/description/ 题目: Give a string s, coun ...
- 详解Top命令 输出命令行选项及代码
Linux中的top命令显示系统上正在运行的进程.它是系统管理员最重要的工具之一.被广泛用于监视服务器的负载.在本篇中,我们会探索top命令的细节.top命令是一个交互命令.在运行top的时候还可以运 ...
- Excel分类汇总
版本:2016,数据来源:我要自学网,曾贤志老师 1.首先,要进行分类,在进行汇总, 如对日期进行汇总的话: 如果对品名进行汇总的话 2.光标要定在数据源,在选择分类字段(包含项目比如品名 ...
- BZOJ4195:[NOI2015]程序自动分析
浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php? ...
- 创建Task的多种方法
Gradle的Project从本质上说只是含有多个Task的容器,一个Task与Ant的Target相似,表示一个逻辑上的执行单元. 我们可以通过多种方式定义Task,所有的Task都存放在Proje ...
- java流类共享篇
总结: package com.aini; import java.io.*; import java.util.StringBuffere; public class tyt { public st ...