BZOJ3745: [Coci2015]Norma【CDQ】
3745: [Coci2015]Norma
#include<cstdio>
#include<algorithm>
using namespace std;
const int MOD=1e9,MAXN=500005;
int n;long long Ans,a[MAXN],sn[MAXN],snj[MAXN],sm[MAXN],smj[MAXN],snm[MAXN],snmj[MAXN];
#include<cctype>
int read(){int ret=0;char ch=getchar();bool f=1;for(;!isdigit(ch);ch=getchar()) f^=!(ch^'-');for(; isdigit(ch);ch=getchar()) ret=(ret<<1)+(ret<<3)+ch-48;return f?ret:-ret;
}
void Solve(int L,int R){if(L==R){Ans=(Ans+a[L]*a[L]%MOD)%MOD;return;}int mid=(R+L)>>1;Solve(L,mid),Solve(mid+1,R);sn[mid]=snj[mid]=sm[mid]=smj[mid]=snm[mid]=snmj[mid]=0;long long MAX=0,MIN=1<<30;for(int i=mid+1;i<=R;i++){MAX=max(MAX,a[i]),MIN=min(MIN,a[i]);sn[i]=(sn[i-1]+MIN)%MOD;sm[i]=(sm[i-1]+MAX)%MOD;snj[i]=(snj[i-1]+MIN*i%MOD)%MOD;smj[i]=(smj[i-1]+MAX*i%MOD)%MOD;snm[i]=(snm[i-1]+MIN*MAX%MOD)%MOD;snmj[i]=(snmj[i-1]+MIN*MAX%MOD*i%MOD)%MOD;}MAX=0,MIN=1<<30;for(int i=mid,j=mid,k=mid;i>=L;i--){MAX=max(MAX,a[i]),MIN=min(MIN,a[i]);while(j<R&&a[j+1]<=MAX) j++;while(k<R&&a[k+1]>=MIN) k++;int x=min(j,k),y=max(j,k);Ans=(Ans+MAX*MIN%MOD*(1ll*(mid-i+x-i+3)*(x-mid)/2%MOD))%MOD;Ans=(Ans+(snmj[R]-snmj[y]-(snm[R]-snm[y])*(i-1)%MOD)%MOD+MOD)%MOD;if(k<j) Ans=(Ans+MAX*(snj[y]-snj[x]-(sn[y]-sn[x])*(i-1)%MOD)%MOD+MOD)%MOD;else Ans=(Ans+MIN*(smj[y]-smj[x]-(sm[y]-sm[x])*(i-1)%MOD)%MOD+MOD)%MOD;}
}
int main(){n=read();for(int i=1;i<=n;i++) a[i]=read();Solve(1,n);printf("%lld\n",Ans);return 0;
}
BZOJ3745: [Coci2015]Norma【CDQ】相关推荐
- 【BZOJ3745】Norma(CDQ分治)
[BZOJ3745]Norma(CDQ分治) 题面 BZOJ 洛谷 题解 这种问题直接做不好做,显然需要一定的优化.考虑\(CDQ\)分治. 现在唯一需要考虑的就是跨越当前中间节点的所有区间如何计算答 ...
- 【BZOJ3963】[WF2011]MachineWorks cdq分治+斜率优化
[BZOJ3963][WF2011]MachineWorks Description 你是任意性复杂机器公司(Arbitrarily Complex Machines, ACM)的经理,公司使用更加先 ...
- 【教程】简易CDQ分治教程学习笔记
前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦! CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...
- 【BZOJ1492】[NOI2007]货币兑换Cash 斜率优化+cdq分治
[BZOJ10492][NOI2007]货币兑换Cash Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下简称B券).每 ...
- 【Luogu1393】动态逆序对(CDQ分治)
[Luogu1393]动态逆序对(CDQ分治) 题面 题目描述 对于给定的一段正整数序列,我们定义它的逆序对的个数为序列中ai>aj且i < j的有序对(i,j)的个数.你需要计算出一个序 ...
- 【CF603E】Pastoral Oddities cdq分治+并查集
[CF603E]Pastoral Oddities 题意:有n个点,依次加入m条边权为$l_i$的无向边,每次加入后询问:当前图是否存在一个生成子图,满足所有点的度数都是奇数.如果有,输出这个生成子图 ...
- 【BZOJ2989】数列(CDQ分治,扫描线)
[BZOJ2989]数列(CDQ分治) 题面 BZOJ 权.....权限题.. 题解 Description 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和 ...
- 【BZOJ3456】【CDQ分治+FNT】城市规划
试题来源 2013中国国家集训队第二次作业 问题描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得 ...
- 【CDQ分治+FFT】LGP4566 [CTSC2018]青蕈领主
[题目] 原题地址 有一个长度为 n n n的排列 a a a,给定 l i l_i li,表示 a i − l i + 1 - a i a_{i-l_i+1} \dots a_i ai−li+1 ...
最新文章
- android 设置单边框,详解Android用Shape制作单边框图的两种思路和坑
- 汇编:以字符形式给出数据
- eclipse里source的快捷方法_Eclipse开发必备快捷键
- String Split 和 Join
- 20170204-py
- 使用预编译头提高编译速度
- 简单聊下5G与V2X
- pytorch线性回归代码_[PyTorch 学习笔记] 1.3 张量操作与线性回归
- scratch少儿编程第一季——07、人要衣装佛靠金装——外观模块
- Qt如何调用VS编写的动态链接库(dll文件)
- Silverlight C# 游戏开发:Flyer10完成寻找工作
- 数据恢复软件分享(第二篇)
- 微星MSI电脑(GL63 8RE-416CN)打开BIOS隐藏的高级设置方法
- C++项目经验(6)——yaml-cpp的安装、报错解决及使用
- 编程珠玑 啊哈 算法
- Aspose PDF预览出现乱码
- np.take()函数用法 python numpy
- OpenAVNU 带宽预留协议SRP代码分析
- 投影坐标系、大地坐标系(地理坐标系)
- 点滴:均线交易策略代码的参考