bzoj3745: [Coci2015]Norma
Description

Input
Output
预处理每个位置的数作为最小/大值向左延伸的最大距离,线段树维护序列的前缀的后缀min和后缀max以及这个前缀的后缀对答案的贡献,在前缀末尾加入一个数可以快速维护。
#include<cstdio>
typedef long long i64;
const int N=,P=;
char buf[N*],*ptr=buf-;
int _(){
int x=,c=*++ptr;
while(c<)c=*++ptr;
while(c>)x=x*+c-,c=*++ptr;
return x;
}
int _l,_r,_a,v1,v2,ans=;
inline int mod(int x){return x<P?x:x-P;}
struct node{
node*l,*r;
int f1,f2,sz,L,R;
int s1,s2,s3,ss1,ss2,ss3;
void fil1(int x){
f1=x;
s1=i64(x)*sz%P;
ss1=(i64(sz)*(sz+)>>)%P*x%P;
s3=i64(x)*s2%P;
ss3=i64(x)*ss2%P;
}
void fil2(int x){
f2=x;
s2=i64(x)*sz%P;
ss2=(i64(sz)*(sz+)>>)%P*x%P;
s3=i64(x)*s1%P;
ss3=i64(x)*ss1%P;
}
void dn(){
if(f1)l->fil1(f1),r->fil1(f1),f1=;
if(f2)l->fil2(f2),r->fil2(f2),f2=;
}
void up(){
s1=mod(l->s1+r->s1);
s2=mod(l->s2+r->s2);
s3=mod(l->s3+r->s3);
ss1=(l->ss1+r->ss1+i64(l->s1)*r->sz)%P;
ss2=(l->ss2+r->ss2+i64(l->s2)*r->sz)%P;
ss3=(l->ss3+r->ss3+i64(l->s3)*r->sz)%P;
}
void set1(){
if(_l<=L&&R<=_r){
fil1(_a);
return;
}
dn();
int M=L+R>>;
if(_l<=M)l->set1();
if(_r>M)r->set1();
up();
}
void set2(){
if(_l<=L&&R<=_r){
fil2(_a);
return;
}
dn();
int M=L+R>>;
if(_l<=M)l->set2();
if(_r>M)r->set2();
up();
}
void get(){
if(R<=_r){
v2=(v2+ss3+i64(v1)*sz)%P;
v1=mod(v1+s3);
return;
}
dn();
int M=L+R>>;
l->get();
if(_r>M)r->get();
}
}ns[N*],*np=ns,*rt;
node*build(int L,int R){
node*w=np++;
w->L=L;w->R=R;
w->sz=R-L+;
if(L!=R){
int M=L+R>>;
w->l=build(L,M);
w->r=build(M+,R);
}
return w;
}
int n,a[N],p1[N],p2[N],ss[N],sp=;
int main(){
fread(buf,,sizeof(buf),stdin);
n=_();
for(int i=;i<=n;++i)a[i]=_();
for(int i=n;i;--i){
while(sp&&a[ss[sp]]>a[i])p1[ss[sp--]]=i+;
ss[++sp]=i;
}
while(sp)p1[ss[sp--]]=;
for(int i=n;i;--i){
while(sp&&a[ss[sp]]<a[i])p2[ss[sp--]]=i+;
ss[++sp]=i;
}
while(sp)p2[ss[sp--]]=;
rt=build(,n);
for(int i=;i<=n;++i){
_l=p1[i];_r=i;_a=a[i];
rt->set1();
_l=p2[i];
rt->set2();
v1=v2=;
rt->get();
ans=mod(ans+v2);
}
printf("%d",ans);
return ;
}
bzoj3745: [Coci2015]Norma的更多相关文章
- [BZOJ3745][COCI2015]Norma[分治]
题意 题目链接 分析 考虑分治,记当前分治区间为 \(l,r\) . 枚举左端点,然后发现右端点无非三种情况: 极大极小值都在左边; 有一个在左边; 极大极小值都在右边; 考虑递推 \(l\) 的同时 ...
- bzoj3745: [Coci2015]Norma 分治,单调队列
链接 bzoj 思路 首先\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\sum\limits_{k=i}^{j}max(a_k)\)可以用单调队列求解.参见 ...
- 【BZOJ3745】[Coci2015]Norma cdq分治
[BZOJ3745][Coci2015]Norma Description Input 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output 输出答案对10^9取模后的结果. ...
- 【BZOJ3745】Norma(CDQ分治)
[BZOJ3745]Norma(CDQ分治) 题面 BZOJ 洛谷 题解 这种问题直接做不好做,显然需要一定的优化.考虑\(CDQ\)分治. 现在唯一需要考虑的就是跨越当前中间节点的所有区间如何计算答 ...
- BZOJ3745:[COCI2015]Norma
浅谈离线分治算法:https://www.cnblogs.com/AKMer/p/10415556.html 题目传送门:https://lydsy.com/JudgeOnline/problem.p ...
- 【BZOJ3745】Norma [分治]
Norma Time Limit: 20 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description Input 第1行,一个整数N: ...
- BZOJ3745 : [Coci2014]Norma
考虑枚举右端点,用线段树维护[i,nowr]的答案. 当右端点向右延伸时,需要知道它前面第一个比它大/小的数的位置,这里面的最值将发生改变,这个使用单调队列求出,然后将所有的l都加1. 注意常数优化. ...
- bzoj 3745: [Coci2015]Norma
Description Solution 考虑分治: 我们要统计跨越 \(mid\) 的区间的贡献 分最大值和最小值所在位置进行讨论: 设左边枚举到了 \(i\),左边 \([i,mid]\) 的最大 ...
- BZOJ 3745: [Coci2015]Norma(分治)
题意 给定一个正整数序列 \(a_1, a_2, \cdots, a_n\) ,求 \[ \sum_{i=1}^{n} \sum_{j=i}^{n} (j - i + 1) \min(a_i,a_{i ...
随机推荐
- Laravel 5 数据库迁移文件示例
php artisan make:migration create_stocks_table 在项目根目录执行上面的命令后,会在database/migrations目录下生成2016_06_03_1 ...
- I/O多路复用 SELECT POLL -- 内核实现
等待队列 先补充个基础知识――等待队列 认识 定义 wait_queue_head_t wait_queue; 初始化 init_waitqueue_head(&wait_queue); 等待 ...
- Add two numbers [LeetCode]
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- ArrayList其实就那么一回事儿之源码浅析
ArrayList 算是常用的集合之一了,不知作为javaner的你有没在百忙之中抽出一点时间看看ArrayList的源码呢. 如果看了,你会觉得其实ArrayList其实就那么一回事儿,对吧,下面就 ...
- Linux (Ubuntu) 下配置VPN服务器
昨天网上找了下VPN的相关信息,居然各种撞墙,特别郁闷,自己不容易找到的东西,记录下VPN的配置信息 ubuntu 13.1下配置VPN ,采用PPTP实现, 第一步.安装pptpd,没有安装包记得 ...
- hadoop运行原理之shuffle
hadoop的核心思想是MapReduce,但shuffle又是MapReduce的核心.shuffle的主要工作是从Map结束到Reduce开始之间的过程.首先看下这张图,就能了解shuffle所处 ...
- 全真模拟 (1) day1
第一题: 题目大意: 给出N个数的m对关系(a,b)表示a大于b. 每个数至少为100,求这些书最小可能的和. 解题过程: 1.看到这题就想到之前USACO的一道题,那题是N头牛排序,然后给出m对关系 ...
- python leetcode 日记 --Contains Duplicate II --219
题目: Given an array of integers and an integer k, find out whether there are two distinct indices i a ...
- megapix-image插件 使用Canvas压缩图片上传 解决手机端图片上传功能的问题
最近在弄微信端的公众号.订阅号的相关功能,发现原本网页上用的uploadify图片上传功能到手机端有的手机类型上就不能用了,比如iphone,至于为啥我想应该不用多说了吧(uploadify使用fla ...
- Http协议访问DataSnap Rest 服务器
用TIDHttp访问DataSnap Rest服务器,在服务器采用了用户验证的情况下,客户端需要注意下面的细节,否则不能正常连接. 假如服务器有如下的用户验证: procedure TSC.DSAut ...