Luogu P2717 寒假作业(平衡树)
题意
题目背景
\(zzs\)和\(zzy\)正在被寒假作业折磨,然而他们有答案可以抄啊。
题目描述
他们共有\(n\)项寒假作业。\(zzy\)给每项寒假作业都定义了一个疲劳值\(A_i\),表示抄这个作业所要花的精力。\(zzs\)现在想要知道,有多少组连续的寒假作业的疲劳值的平均值不小于\(k\)?
简单地说,给定\(n\)个正整数\(A_1,A_2,A_3,\dots ,A_n\),求出有多少个连续的子序列的平均值不小于\(k\)。
输入输出格式
输入格式:
第一行两个正整数,\(n\)和\(k\)。
第二行到第\(n+1\)行,每行一个正整数\(A_i\)。
输出格式:
一个非负整数。
输入输出样例
输入样例#1:
3 2
1
2
3
输出样例#1:
4
说明
样例解释:共有\(6\)个连续的子序列,分别是\((1),(2),(3),(1,2),(2,3),(1,2,3)\),平均值分别为\(1,2,3,1.5,2.5,2\),其中平均值不小于\(k\)的共有\(4\)个。
对于\(20\%\)的数据,\(1\leq n\leq 100\);
对于\(50\%\)的数据,\(1\leq n\leq 5000\);
对于\(100\%\)的数据,\(1\leq n\leq 100000\);
对于\(100\%\)的数据,\(1\leq A_i\leq 10000,1\leq k\leq 10000\)。
思路
统计一个前缀和\(s\),然后考虑\([i,j]\)区间的平均值怎样才能不小于\(k\)呢?
\]
\]
诶,那对于每个\(j\)查询有多少个\(i\)满足上述式子不就好了吗?
在这里我选择了平衡树完成查询,平衡树选用的是\(fhq\ Treap\)。
还可以考虑的是,与处理出所有的\(s[i-1]-(i-1)\times k\),然后离散化弄到线段树上做,也是可行的,不过代码我就没有写了。
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MAXN=2e5+5;
LL n,k,cnt,rt,ans,a[MAXN],s[MAXN];
struct Node
{
LL val,rnd,sz;
LL ls,rs;
#define val(a) node[a].val
#define rnd(a) node[a].rnd
#define sz(a) node[a].sz
#define ls(a) node[a].ls
#define rs(a) node[a].rs
}node[MAXN];
LL read()
{
LL re=0;char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)) re=(re<<3)+(re<<1)+ch-'0',ch=getchar();
return re;
}
LL new_node(LL v)
{
val(++cnt)=v;
rnd(cnt)=rand();
sz(cnt)=1;
ls(cnt)=rs(cnt)=0;
return cnt;
}
void update(LL p){sz(p)=sz(ls(p))+sz(rs(p))+1;}
LL merge(LL x,LL y)
{
if(!x||!y) return x+y;
if(rnd(x)<rnd(y))
{
rs(x)=merge(rs(x),y);
update(x);
return x;
}
else
{
ls(y)=merge(x,ls(y));
update(y);
return y;
}
}
void split(LL now,LL v,LL &x,LL &y)
{
if(!now) x=y=0;
else
{
if(val(now)<=v)
{
x=now;
split(rs(now),v,rs(now),y);
}
else
{
y=now;
split(ls(now),v,x,ls(now));
}
update(now);
}
}
int main()
{
srand(time(0));
n=read(),k=read();
for(LL i=1;i<=n;i++) a[i]=read(),s[i]=s[i-1]+a[i];
for(LL i=1;i<=n;i++)
{
LL x,y;
split(rt,s[i]-k*i,x,y);
ans+=sz(x);
rt=merge(x,y);
split(rt,s[i-1]-k*(i-1),x,y);
rt=merge(merge(x,new_node(s[i-1]-k*(i-1))),y);
if(s[i]-k*i>=s[i-1]-k*(i-1)) ans++;
}
printf("%lld",ans);
return 0;
}
Luogu P2717 寒假作业(平衡树)的更多相关文章
- 洛谷 P2717 寒假作业
https://www.luogu.org/problemnew/show/P2717 $n \le 1004枚举区间,挨个计算,判断,时间复杂度$O(n^3)$. $n \le 5000$,预处理出 ...
- Q114寒假作业之割绳子
割绳子 TimeLimit:1000MS MemoryLimit:10000K 64-bit integer IO format:%lld Problem Description 已知有n条绳子,每 ...
- 寒假作业---蓝桥杯---DFS
题目描述 现在小学的数学题目也不是那么好玩的. 看看这个寒假作业: 每个方块代表1~13中的某一个数字,但不能重复. 比如: 6 + 7 = 13 9 - 8 = 1 3 * 4 = 12 10 ...
- java 寒假作业
寒假作业 现在小学的数学题目也不是那么好玩的. 看看这个寒假作业: □ + □ = □ □ - □ = □ □ × □ = □ □ ÷ □ = □ (如果显示不出来,可以参见[图1.jpg]) 每个方 ...
- 2016蓝桥杯省赛C/C++A组第六题 寒假作业
题意:现在小学的数学题目也不是那么好玩的. 看看这个寒假作业: □ + □ = □ □ - □ = □ □ × □ = □ □ ÷ □ = □ 每个方块代表1~13中的某一个数字,但不能重复. 比如: ...
- java实现第七届蓝桥杯寒假作业
题目6.寒假作业 寒假作业 现在小学的数学题目也不是那么好玩的. 看看这个寒假作业: □ + □ = □ □ - □ = □ □ × □ = □ □ ÷ □ = □ (如果显示不出来,可以参见[图1. ...
- 【GDKOI2014】JZOJ2020年8月13日提高组T3 壕壕的寒假作业
[GDKOI2014]JZOJ2020年8月13日提高组T3 壕壕的寒假作业 题目 Description Input Output 输出n行.第i行输出两个整数,分别表示第i份作业最早完成的时刻以及 ...
- 关于第三次寒假作业之C++Calculator项目的情况:
一.仓库地址: object-oriented: 二.作业要求: Calculator: 三.完成本次作业的情况及感受: 刚接触到这个题目的时候,自己就是那丈二的和尚,摸不着头脑,由于自己视频找得比较 ...
- 寒假作业2:简化电梯设计elevator
Github仓库地址:hua-kui 寒假学习计划:学习计划 - 题目背景 一栋10层的大楼(楼层编号1-10),设有一台无限载重的电梯,初始时电梯停在1层.电梯移动1层的耗时为1,在某一层停靠的耗时 ...
随机推荐
- NX二次开发-UFUN查询体的类型为实体还是片体UF_MODL_ask_body_type
NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include <u ...
- NX二次开发-算法篇-vector函数排序(例子:遍历所有点并排序)
NX9+VS2012 #include <uf.h> #include <uf_ui.h> #include <uf_curve.h> #include <u ...
- NX二次开发-删除功能区工具栏UF_UI_remove_ribbon
NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...
- 10.RabbitMQ Fanout类型交换机
Fanout类型交换机忽略Routing Key,它将消息传递到所有与它绑定的队列上. Producer.java package com.test.fanout; import co ...
- 微信-小程序-开发文档-服务端-模板消息:templateMessage.getTemplateList
ylbtech-微信-小程序-开发文档-服务端-模板消息:templateMessage.getTemplateList 1.返回顶部 1. templateMessage.getTemplateLi ...
- 使用Beyond Compare作为Perforce默认的文件比较工具
使用perforce自带的文件比较工具有时候会遇到乱码的情况,如下: 暂时不知道如何解决上述问题,因此想换个文件比对工具,比如Beyond Compare. 设定位置:Edit->prefere ...
- 如何优雅的使用Objects.requireNonNull(T obj, String message)定制你的NPE异常
IDEA中习惯跟踪源码实现逻辑,多次碰到Objects.requireNonNull(T obj)这个方法,改方法主要用于提早判断对象是否为空,以便更早的抛出NPE 平时小组开发中强调程序健壮性,不允 ...
- org.apache.jasper.JasperException: Unable to compile class for JSP: Invalid character constant
这里不能用单引号,只能为双引号 request.setCharacterEncoding('gb2312'); String user = request.getParameter(" ...
- JS对象 charAt() 方法可返回指定位置的字符。返回的字符是长度为 1 的字符串。
返回指定位置的字符 charAt() 方法可返回指定位置的字符.返回的字符是长度为 1 的字符串. 语法: stringObject.charAt(index) 参数说明: 注意:1.字符串中第一个字 ...
- Java 局部变量
Java 局部变量 局部变量声明在方法.构造方法或者语句块中: 局部变量在方法.构造方法.或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁: 访问修饰符不能用于局部变量: 局部变量只在声明 ...