【ZJOI2017 Round2练习&BZOJ4826】D1T2 sf(主席树,单调栈)
题意:


思路:From http://blog.csdn.net/neither_nor/article/details/70211150
对每个点i,单调栈求出左边和右边第一个大于i的位置,记为l[i]和r[i]
那么(l[i],r[i])会产生p1的贡献
左端点为l[i],右端点在[i+1,r-1]的点对都会产生p1的贡献
右端点为r[i],左端点在[l+1,i-1]的点对都会产生p2的贡献
将点对看成平面上的点,横坐标左端点纵坐标右端点,上述贡献分别对应单点加和线段加
查询就是矩形求和
From MG:
考虑修改均为如(x,y1..y2)与(x1..x2,y)形式
因为询问均为矩形,则修改(y1..y2,x)与(x,y1..y2)等价
若统一转化为(x,y1..y2)形式,可用主席树维护
若统一转化为(y1..y2,x)形式,可用树状数组套主席树维护
注意点对(i,i)都有p1的贡献
var t:array[..]of record
a,s:int64;
l,r:longint;
end;
d:array[..,..]of longint;
l,r:array[..]of longint;
root,stk,a:array[..]of longint;
n,m,i,cnt,j,top,que,x,y,p1,p2:longint;
ans:int64; procedure update(l,r,x,y,v:longint;var p:longint);
var mid:longint;
begin
if (l>x)or(x>y) then exit;
inc(cnt); t[cnt]:=t[p]; p:=cnt;
t[p].s:=t[p].s+int64(v)*(y-x+);
if (l=x)and(r=y) then
begin
t[p].a:=t[p].a+v;
exit;
end;
mid:=(l+r)>>;
if y<=mid then update(l,mid,x,y,v,t[p].l)
else if x>mid then update(mid+,r,x,y,v,t[p].r)
else
begin
update(l,mid,x,mid,v,t[p].l);
update(mid+,r,mid+,y,v,t[p].r);
end;
end; procedure query(l,r,x,y,p1,p2:longint);
var mid:longint;
begin
if (l=x)and(r=y) then
begin
ans:=ans+t[p1].s-t[p2].s;
exit;
end;
ans:=ans+(t[p1].a-t[p2].a)*(y-x+);
mid:=(l+r)>>;
if y<=mid then query(l,mid,x,y,t[p1].l,t[p2].l)
else if x>mid then query(mid+,r,x,y,t[p1].r,t[p2].r)
else
begin
query(l,mid,x,mid,t[p1].l,t[p2].l);
query(mid+,r,mid+,y,t[p1].r,t[p2].r);
end;
end; procedure swap(var x,y:longint);
var t:longint;
begin
t:=x; x:=y; y:=t;
end; procedure qsort(l,r:longint);
var i,j,mid:longint;
begin
i:=l; j:=r; mid:=d[(l+r)>>,];
repeat
while mid>d[i,] do inc(i);
while mid<d[j,] do dec(j);
if i<=j then
begin
swap(d[i,],d[j,]);
swap(d[i,],d[j,]);
swap(d[i,],d[j,]);
swap(d[i,],d[j,]);
inc(i); dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end; begin
assign(input,'bzoj4826.in'); reset(input);
assign(output,'bzoj4826.out'); rewrite(output);
readln(n,que,p1,p2);
for i:= to n do read(a[i]);
top:=; stk[top]:=; a[]:=maxlongint;
for i:= to n do
begin
while (top>)and(a[i]>a[stk[top]]) do dec(top);
if top= then l[i]:=
else l[i]:=stk[top];
inc(top); stk[top]:=i;
end;
top:=; stk[top]:=n+; a[n+]:=maxlongint;
for i:=n downto do
begin
while (top>)and(a[i]>a[stk[top]]) do dec(top);
if top= then r[i]:=n+
else r[i]:=stk[top];
inc(top); stk[top]:=i;
end;
for i:= to n do
begin
if (l[i]>)and(r[i]<=n) then
begin
inc(m); d[m,]:=l[i]; d[m,]:=r[i]; d[m,]:=r[i]; d[m,]:=p1;
end;
if l[i]> then
begin
inc(m); d[m,]:=l[i]; d[m,]:=i+; d[m,]:=r[i]-; d[m,]:=p2;
end;
if r[i]<=n then
begin
inc(m); d[m,]:=r[i]; d[m,]:=l[i]+; d[m,]:=i-; d[m,]:=p2;
end;
end;
qsort(,m);
j:=;
for i:= to n do
begin
root[i]:=root[i-];
while (j<=m)and(d[j,]=i) do
begin
update(,n,d[j,],d[j,],d[j,],root[i]);
inc(j);
end;
end;
for i:= to que do
begin
readln(x,y);
ans:=(y-x)*p1;
query(,n,x,y,root[y],root[x-]);
writeln(ans);
end;
close(input);
close(output);
end.
【ZJOI2017 Round2练习&BZOJ4826】D1T2 sf(主席树,单调栈)的更多相关文章
- bzoj 4826: [Hnoi2017]影魔 [主席树 单调栈]
4826: [Hnoi2017]影魔 题意:一个排列,点对\((i,j)\),\(p=max(i+1,j-1)\),若\(p<a_i,a_j\)贡献p1,若\(p\)在\(a_1,a_2\)之间 ...
- 【BZOJ3956】Count 主席树+单调栈
[BZOJ3956]Count Description Input Output Sample Input 3 2 0 2 1 2 1 1 1 3 Sample Output 0 3 HINT M,N ...
- [AH2017/HNOI2017]影魔(主席树+单调栈)
设\(l[i]\)为i左边第一个比i大的数的下标.\(r[i]\)为i右边第一个比i大的数的下标. 我们把\(p1,p2\)分开考虑. 当产生贡献为\(p1\)时\(i\)和\(j\)一定满足,分别为 ...
- Codeforces 781E Andryusha and Nervous Barriers 线段树 单调栈
原文链接https://www.cnblogs.com/zhouzhendong/p/CF781E.html 题目传送门 - CF781E 题意 有一个矩形,宽为 w ,高为 h .一开始会有 w 个 ...
- 洛谷P4425 转盘 [HNOI/AHOI2018] 线段树+单调栈
正解:线段树+单调栈 解题报告: 传送门! 1551又是一道灵巧连题意都麻油看懂的题,,,,所以先解释一下题意好了,,,, 给定一个n元环 可以从0时刻开始从任一位置出发 每次可以选择向前走一步或者在 ...
- 线段树+单调栈+前缀和--2019icpc南昌网络赛I
线段树+单调栈+前缀和--2019icpc南昌网络赛I Alice has a magic array. She suggests that the value of a interval is eq ...
- 牛客多校第四场sequence C (线段树+单调栈)
牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...
- Codeforces 1175F - The Number of Subpermutations(线段树+单调栈+双针/分治+启发式优化)
Codeforces 题面传送门 & 洛谷题面传送门 由于这场的 G 是道毒瘤题,蒟蒻切不动就只好来把这场的 F 水掉了 看到这样的设问没人想到这道题吗?那我就来发篇线段树+单调栈的做法. 首 ...
- [BZOJ4826][HNOI2017]影魔(主席树)
4826: [Hnoi2017]影魔 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 669 Solved: 384[Submit][Status][ ...
随机推荐
- React实战之Ant Design—Upload上传_附件上传
React实战之Ant Design—Upload上传_附件上传 Upload组件大家都在官方文档中看过了,但写的时候还是会遇到许多问题,一些新手看了文档后感觉无从下手,本文过多的简绍就不说了,直接看 ...
- activiti遇到的问题
1.act_hi_detail表里面没有数据 原因是没有加历史变量的判断 2.流程图添加网关,写流转表达式 比如请假流程 大于3天小于5天的条件:${请假实体类.属性名称}
- git 详细部署及其应用
第1章 版本控制系统 自动生成备份.随时回滚.知道改动的地方. 1.1 svn和git的区别 1.1.1 svn 集中式的版本控制系统,只有一个中央数据仓库,如果中央数据库仓库挂了或者不可访问,所有的 ...
- ACM_区间调度问题(贪心)
Meetings 系列一 Time Limit: 2000/1000ms (Java/Others) Problem Description: 多年之后的广财ACM编协如日中天,下系多个部门,且编协成 ...
- Android 性能优化(14)网络优化( 10)Determining and Monitoring the Connectivity Status
Determining and Monitoring the Connectivity Status This lesson teaches you to Determine if you Have ...
- 用SpringMVC实现的上传下载
1.导入相关jar包 commons-fileupload.jar commons-io.jar 2.配置web.xml文件 <?xml version="1.0" enco ...
- ActiveMQ命令行工具
命令行工具 命令行工具 n activemq——运行activemq代理 n activemq-admin——管理代理的实例 在5.0之前activemq-admin被分成多个脚本,例如 ...
- Spring:(三) --常见数据源及声明式事务配置
Spring自带了一组数据访问框架,集成了多种数据访问技术.无论我们是直接通过 JDBC 还是像Hibernate或Mybatis那样的框架实现数据持久化,Spring都可以为我们消除持久化代码中那些 ...
- LN : leetcode 263 Ugly Number
lc 263 Ugly Number lc 263 Ugly Number Write a program to check whether a given number is an ugly num ...
- 1682. [HAOI2014]贴海报
1682. [HAOI2014]贴海报 ★★☆ 输入文件:ha14d.in 输出文件:ha14d.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] Byteto ...