[SPOJ22343] Norma
Description
现在有一个长度为\(N(N\leq 500000)\)的序列,定义区间\([l,r]\)的价值为\([l,r]\)的最小值乘上\([l,r]\)的最大值乘上\([l,r]\)的长度。问这个序列的所有区间的价值和对\(10^9\)取模的结果。
Solution
遇到神仙题考虑分治。
考虑所有经过\(mid\)的区间。
对于小于等于\(mid的\)\(i\),我们要求所有在\(mid\)右边的\(j\)并计算\([i,j]\)的价值。
可以先维护出来\([i,mid]\)的最小值和最大值记为\(minn,maxn\)。
在右边维护两个指针\(p,q\),分别表示第一个大于\(minn\)的位置和第一个小于\(maxn\)的位置。
如果我们把\(i\)从\(mid\)倒序循环到\(l\),那么可以发现,\(maxn,minn,p,q\)都是具有单调性的。
那对于一个\(i\)的答案就可以分成三部分计算(假设\(p<q\)) :\([mid+1,p),[p,q),[q,r]\)。做几个前缀和弄一下就行了。
Code
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<cctype>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define int long long
using std::min;
using std::max;
using std::swap;
using std::vector;
const int N=5e5+5;
typedef double db;
const int mod=1e9;
typedef long long ll;
#define pb(A) push_back(A)
#define pii std::pair<int,int>
#define mp(A,B) std::make_pair(A,B)
int n;
ll qz[N][2];
ll mn[N][2];
ll mx[N][2];
ll val[N],ans;
int stk[N],top;
int qh(int l,int r){
if(l>r) return 0;
int len=r-l+1;
return (l+r)*len/2%mod;
}
int getint(){
int X=0,w=0;char ch=0;
while(!isdigit(ch))w|=ch=='-',ch=getchar();
while( isdigit(ch))X=X*10+ch-48,ch=getchar();
if(w) return -X;return X;
}
const int inf=1e9;
void solve(int l,int r){
if(l==r){(ans+=val[l]*val[l]%mod)%=mod;return;}
int mid=l+r>>1;
solve(l,mid);solve(mid+1,r);
ll minn=inf,maxn=-inf;
qz[mid][0]=qz[mid][1]=0;
for(int i=mid+1;i<=r;i++){
minn=min(minn,val[i]);
maxn=max(maxn,val[i]);
mn[i][0]=(mn[i-1][0]+minn)%mod;
mn[i][1]=(mn[i-1][1]+minn*(i-mid)%mod)%mod;
mx[i][0]=(mx[i-1][0]+maxn)%mod;
mx[i][1]=(mx[i-1][1]+maxn*(i-mid)%mod)%mod;
qz[i][0]=(qz[i-1][0]+(ll)minn*maxn%mod)%mod;
qz[i][1]=(qz[i-1][1]+(ll)minn*maxn%mod*(i-mid)%mod)%mod;
}
minn=inf,maxn=-inf;
int p=mid+1,q=mid+1;
for(int i=mid;i>=l;i--){
minn=min(minn,val[i]);
maxn=max(maxn,val[i]);
while(p<=r and val[p]>=minn) p++;
while(q<=r and val[q]<=maxn) q++;
int lll=min(p,q),rr=max(p,q);
int len=lll-mid-1;
(ans+=qh(mid+1-i+1,lll-1-i+1)*maxn%mod*minn%mod)%=mod;
if(p<q) (ans+=(mn[q-1][1]-mn[p-1][1]+mod)%mod*maxn%mod+(mn[q-1][0]-mn[p-1][0]+mod)%mod*(mid-i+1)%mod*maxn%mod)%=mod;
if(p>q) (ans+=(mx[p-1][1]-mx[q-1][1]+mod)%mod*minn%mod +(mx[p-1][0]-mx[q-1][0]+mod)%mod*(mid-i+1)%mod*minn%mod)%=mod;
(ans+=(qz[r][1]-qz[rr-1][1]+mod)%mod+(qz[r][0]-qz[rr-1][0]+mod)%mod*(mid-i+1)%mod)%=mod;
}
}
signed main(){
n=getint();
for(int i=1;i<=n;i++) val[i]=getint();
solve(1,n);
printf("%lld\n",ans);
return 0;
}
[SPOJ22343] Norma的更多相关文章
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- 【BZOJ3745】Norma(CDQ分治)
[BZOJ3745]Norma(CDQ分治) 题面 BZOJ 洛谷 题解 这种问题直接做不好做,显然需要一定的优化.考虑\(CDQ\)分治. 现在唯一需要考虑的就是跨越当前中间节点的所有区间如何计算答 ...
- 【BZOJ3745】Norma [分治]
Norma Time Limit: 20 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description Input 第1行,一个整数N: ...
- 【BZOJ3745】[Coci2015]Norma cdq分治
[BZOJ3745][Coci2015]Norma Description Input 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output 输出答案对10^9取模后的结果. ...
- 【题解】Norma [COCI2014] [SP22343]
[题解]Norma [COCI2014] [SP22343] 传送门:\(\text{Norma [COCI2014]}\) \(\text{[SP22343]}\) [题目描述] 给定一个整数 \( ...
- 『Norma 分治』
Norma Description Input Format 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output Format 输出答案对10^9取模后的结果. Sample ...
- bzoj3745: [Coci2015]Norma
Description Input 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output 输出答案对10^9取模后的结果. 预处理每个位置的数作为最小/大值向左延伸的最大距离, ...
- BZOJ3745 : [Coci2014]Norma
考虑枚举右端点,用线段树维护[i,nowr]的答案. 当右端点向右延伸时,需要知道它前面第一个比它大/小的数的位置,这里面的最值将发生改变,这个使用单调队列求出,然后将所有的l都加1. 注意常数优化. ...
- white-space norma nowrap强制同一行内显示所有文本文字,让所有文字内容中一排显示不换行
日常我们为了让文字内容在一行内显示完,哪怕宽度不够也不能换行,我们可以使用white-space样式,但如果遇到了html br强制换行标签,无论是设置white-space与否都会被<br&g ...
随机推荐
- loadtxt()函数的糟心历程
原计划:导入一个csv文件,然后算出平均值 import numpy as np c=np.loadtxt('d:\python36\data.csv', delimiter=',', usecols ...
- Awesome Python 中文版
Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 vinta 发起和维护.内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文 ...
- MFC在对话框中嵌入对话框
在对话框中嵌入子对话框 代码 m_childDlg = new CChildDlg(); m_childDlg->Create(IDD_CHILD_DIALOG,AfxGetApp()-> ...
- (PMP)第11章-----项目风险管理
11.1 规划风险管理 输入 工具与技术 输出 1.项目章程 2.项目管理计划 (所有组件) 3.项目文件 (相关方登记册) 4.事业环境因素 5.组织过程资产 1.专家判断 2.数据分析 (相关方分 ...
- 前端之js
简介: JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互,JavaScript是浏览器解释执行的 前端三大块 ...
- 【repost】H5总结
1.新增的语义化标签: <nav>: 导航 <header>: 页眉 <footer>: 页脚 <section>:区块 <article> ...
- 装Office时,安装程序找不到Office.zh-cn\OfficeMUI问题
运行Office 2007安装程序,没想到安装并不顺利,竟然在开始安装时就提示:"找不到Office.zh-cn\OfficeMUI.xml",而文件却是完整存在的,怎么回事? 原 ...
- 2019-4-25 html学习笔记
一.概念 文本 用于储存和记录文字信息的载体 html 超文本标记语言(本质就是给文本增加语义 如<h1></h1>就是给文字添加一级标题的语义) 注:互联网三大基石 有 ...
- Linux pwn入门教程(0)——环境配置
作者:Tangerine@SAINTSEC 0×00前言 作为一个毕业一年多的辣鸡CTF选手,一直苦于pwn题目的入门难,入了门更难的问题.本来网上关于pwn的资料就比较零散,而且经常会碰到师傅们堪比 ...
- Javascript高级编程学习笔记(4)—— JS中的数据类型(2)
接着昨天的文章,今天这篇文章主要讲述JS中剩余的两种数据类型String,和Object String类型 对于该类型,书中给出的解释为:由0或多个16为Unicode字符组成的字符序列. 对于JS中 ...