【ZJOI2017 Round1练习】D2T3 counter(线段树)
题意:


思路:

预处理出b[i]代表i位置之前比a[i]小的数的个数
以每个数为结尾的组数是线段树中(1,a[i]-1)
对于a[i]换到最后,相当于线段树中(a[i]+1,n)--
交换后b[i]又变成了a[i]-1因为换到最后不需要考虑位置只需要考虑大小关系
var t:array[..]of record
a,s,l:int64;
end;
a,b:array[..]of longint;
n,m,i:longint;
ans,s:int64; procedure pushdown(p:longint);
var l,r:longint;
tmp:int64;
begin
l:=p<<; r:=l+;
tmp:=t[p].a;
if tmp= then exit;
t[l].a:=t[l].a+tmp;
t[r].a:=t[r].a+tmp;
t[l].s:=t[l].s+t[l].l*tmp;
t[r].s:=t[r].s+t[r].l*tmp;
t[p].a:=;
end; procedure pushup(p:longint);
begin
t[p].s:=t[p<<].s+t[p<<+].s;
end; function query(l,r,x,y,p:longint):int64;
var mid:longint;
begin
if x>y then exit();
if (l>=x)and(r<=y) then exit(t[p].s);
pushdown(p);
mid:=(l+r)>>;
query:=;
if x<=mid then query:=query+query(l,mid,x,y,p<<);
if y>mid then query:=query+query(mid+,r,x,y,p<<+);
pushup(p);
end; procedure update(l,r,x,y,v,p:longint);
var mid:longint;
begin
if x>y then exit;
if (l>=x)and(r<=y) then
begin
t[p].s:=t[p].s+t[p].l*v;
t[p].a:=t[p].a+v;
exit;
end;
pushdown(p);
mid:=(l+r)>>;
if x<=mid then update(l,mid,x,y,v,p<<);
if y>mid then update(mid+,r,x,y,v,p<<+);
pushup(p);
end; procedure build(l,r,p:longint);
var mid:longint;
begin
t[p].l:=r-l+;
if l=r then
begin
t[p].s:=b[l];
exit;
end;
mid:=(l+r)>>;
build(l,mid,p<<);
build(mid+,r,p<<+);
pushup(p);
end; procedure change(l,r,x,v,p:longint);
var mid:longint;
begin
if l=r then
begin
t[p].a:=; t[p].s:=v;
exit;
end;
pushdown(p);
mid:=(l+r)>>;
if x<=mid then change(l,mid,x,v,p<<)
else change(mid+,r,x,v,p<<+);
pushup(p);
end; begin
assign(input,'counter.in'); reset(input);
assign(output,'counter.out'); rewrite(output);
readln(n);
build(,n,);
for i:= to n do
begin
read(a[i]);
b[a[i]]:=query(,n,,a[i]-,);
update(,n,a[i],a[i],,);
end;
fillchar(t,sizeof(t),);
build(,n,);
for i:= to n do
begin
s:=query(,n,,a[i]-,);
ans:=ans+s;
update(,n,a[i]+,n,-,);
s:=a[i]-;
change(,n,a[i],s,);
end;
writeln(ans); close(input);
close(output);
end.
【ZJOI2017 Round1练习】D2T3 counter(线段树)的更多相关文章
- 「ZJOI2017」树状数组(二维线段树)
「ZJOI2017」树状数组(二维线段树) 吉老师的题目真是难想... 代码中求的是 \(\sum_{i=l-1}^{r-1}a_i\),而实际求的是 \(\sum_{i=l}^{r}a_i\),所以 ...
- [BZOJ4785][ZJOI2017]树状数组(概率+二维线段树)
4785: [Zjoi2017]树状数组 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 297 Solved: 195[Submit][Status ...
- 【BZOJ4785】[Zjoi2017]树状数组 树套树(二维线段树)
[BZOJ4785][Zjoi2017]树状数组 Description 漆黑的晚上,九条可怜躺在床上辗转反侧.难以入眠的她想起了若干年前她的一次悲惨的OI 比赛经历.那是一道基础的树状数组题.给出一 ...
- ZJOI2017线段树
ZJOI2017线段树 题意: 给你一颗广义线段树,太长了,自己去看. 题解: 直接上zkw那一套,把闭区间换成开区间,就是把取\([l,r]\),变成取\([l-1,l-1],[r+1,r+ ...
- Loj #2570. 「ZJOI2017」线段树
Loj #2570. 「ZJOI2017」线段树 题目描述 线段树是九条可怜很喜欢的一个数据结构,它拥有着简单的结构.优秀的复杂度与强大的功能,因此可怜曾经花了很长时间研究线段树的一些性质. 最近可怜 ...
- bzoj4785:[ZJOI2017]树状数组:二维线段树
分析: "如果你对树状数组比较熟悉,不难发现可怜求的是后缀和" 设数列为\(A\),那么可怜求的就是\(A_{l-1}\)到\(A_{r-1}\)的和(即\(l-1\)的后缀减\( ...
- 【UOJ295】【ZJOI2017】线段树 倍增
题目大意 http://uoj.ac/problem/295 题解 考虑像 zkw 线段树一样,从 \([l-1,l-1],[r+1,r+1]\) 这两个区间开始往上跳,直到两个指针碰到一起为止. 先 ...
- BZOJ4785 ZJOI2017树状数组(概率+二维线段树)
可以发现这个写挂的树状数组求的是后缀和.find(r)-find(l-1)在模2意义下实际上查询的是l-1~r-1的和,而本来要查询的是l~r的和.也就是说,若结果正确,则a[l-1]=a[r](mo ...
- BZOJ 4785 [Zjoi2017]树状数组 | 二维线段树
题目链接 BZOJ 4785 题解 这道题真是令人头秃 = = 可以看出题面中的九条可怜把求前缀和写成了求后缀和,然后他求的区间和却仍然是sum[r] ^ sum[l - 1],实际上求的是闭区间[l ...
- 洛谷P5211 [ZJOI2017]字符串(线段树+乱搞)
题面 传送门 题解 为什么大佬们全都是乱搞的--莫非这就是传说中的暴力能进队,乱搞能AC-- 似乎有位大佬能有纯暴力+玄学优化\(AC\)(不算上\(uoj\)的\(Hack\)数据的话--这要是放到 ...
随机推荐
- 设计 REST API 的13个最佳实践
写在前面 之所以翻译这篇文章,是因为自从成为一名前端码农之后,调接口这件事情就成为了家常便饭,并且,还伴随着无数的争论与无奈.编写友好的 restful api 不论对于你的同事,还是将来作为第三方服 ...
- vim下ctrl + s 僵死问题的解决
vim下ctrl + s 僵死问题的解决 vim 使用vim习惯性手残Ctrl+S ,解决方法 : Ctrl + Q 就能恢复了
- subprocess使用小方法
import subprocess def create_process(cmd): p = subprocess.Popen(cmd, shell=True, stdout=subp ...
- 2019年今日头条机试_JAVA后台岗_第一题
广度优先遍历: import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; class Nod ...
- Android(java)学习笔记183:多媒体之图形颜色的变化
1.相信大家都用过美图秀秀中如下的功能,调整颜色: 2. 下面通过案例说明Android中如何调色: 颜色矩阵 ColorMatrix cm = new ColorMatrix(); paint.se ...
- tcp 三次握手四次挥手
1.三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK.SYN.FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三次握手过程说 ...
- DROP AGGREGATE - 删除一个用户定义的聚集函数
SYNOPSIS DROP AGGREGATE name ( type ) [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP AGGREGATE 将删除一个现存聚集 ...
- _ 下划线 vue mixins 混入 变量前有下划线 变量不起作用
_ 下划线 vue mixins 混入 变量前有下划线 变量不起作用
- source 1.7 中不支持 lambda 表达式(请使用 -source 8 或更高版本以启用 lambda 表达式)
from:http://blog.csdn.net/qwdafedv/article/details/54691740 https://www.youtube.com/watch?v=oXxijdf8 ...
- sleep 和wait的差别
基本的差别 1.sleep 是Thread 类的方法,wait 是Object类中定义的方法 2.sleep()方法可以在任何地方使用 3.wait()方法只能在synchronized方法中使用,或 ...