还教室 (线段树+暴力)

P1083借教室 看看洛谷P1083《借教室》这道题。 阅读详情

还教室

【引子】
还记得 NOIP2012 提高组 Day2 中的借教室吗?时光飞逝,光阴荏苒,两年过去了, 曾经借教室的同学们纷纷归还自己当初租借的教室。 请你来解决类似于借教室的另一个问题。

【问题描述】
在接受借教室请求的 n 天中,第 i 剩余的教室为 ai 个。 作为大学借教室服务的负责人,你需要完成如下三种操作共 m 次:
① 第 l 天到第 r 天,每天被归还 d 个教室。
② 询问第 l 天到第 r 天教室个数的平均数。
③ 询问第 l 天到第 r 天教室个数的方差。

【输入格式】
第一行包括两个正整数 n 和 m,其中 n 为借教室的天数,m 为操作次数。接下来一行,共包含 n 个整数,第 i 个整数表示第 i 剩余教室数目为 ai 个。
接下来 m 行,每行的第一个整数为操作编号(只能为 1 或 2 或 3) ,接下来包含两个正整数 l 和 r,若操作编号为 1,则接下来再包含一个正整数 d。

【输出格式】
对于每个操作 2 和操作 3,输出一个既约分数(分子与分母互质)表示询问的答案(详见样例)。若答案为 0,请输出“0/1” (不含引号)。

【样例输入】
5 4
1 2 3 4 5
1 1 2 3
2 2 4
3 2 4
3 1 5

【样例输出】
4/1
2/3
14/25

【数据规模与约定】
所有测试点的数据规模如下:
测试点编号 n, m 的规模 约定
1 1 ≤ n, m ≤50 不存在操作 3
2 1 ≤ n, m ≤100 不存在操作 3
3 1 ≤ n, m ≤500
4 1 ≤ n, m ≤1,000
5 1 ≤ n, m ≤2,500
6 1 ≤ n, m ≤5,000
7 1 ≤ n, m ≤50,000 不存在操作 3
8 1 ≤ n, m ≤60,000 不存在操作 3
9 1 ≤ n, m ≤80,000 不存在操作 3
10 1 ≤ n, m ≤100,000 不存在操作 3

对于全部测试数据满足:1 ≤ l ≤ r ≤ n,0 ≤ ai ≤ 10,1 ≤ d ≤3,
操作 1 的数量不超过 10%。
ai 和 d 的范围很小及操作 1 数量很少的原因是为了保证答案的分子不会很大, 以防止答案的分子溢出 64 位整数的范围, 这与题目做法无关。

嗯,这是一道分块写的题目,前五个数据点很容易,直接暴力就可以了。 至于后面的四个点,虽然数据很大,但是没有3操作,所以我们可以用线段树解决,用线段树记录区间和,然后每次查询即可。

program mys;
type
ab=record
l,r,w,c:longint;
end;
var n,m,i,j,k,z,x,y,p:longint;
num,ans,o,sum:int64;
a:array[0..1000000]of int64;
f:array[0..1000000]of ab;

procedure built(x,y,k:longint);
var mid:longint;
begin
f[k].l:=x;
f[k].r:=y;
if x=y then
begin
f[k].w:=a[x];
exit;
end;
mid:=(x+y) div 2;
built(x,mid,k*2);
built(mid+1,y,k*2+1);
f[k].w:=f[k*2].w+f[k*2+1].w;
end;

procedure change(x,y,k:longint);
var mid:longint;
begin
if (f[k].l=x)and(f[k].r=y) then
begin
f[k].w:=f[k].w+(f[k].r-f[k].l+1)*p;
f[k].c:=f[k].c+p;
exit;
end;
if f[k].c<>0 then
begin
f[k*2].w:=f[k*2].w+(f[k*2].r-f[k*2].l+1)*f[k].c;
f[k*2].c:=f[k*2].c+f[k].c;
f[k*2+1].w:=f[k*2+1].w+(f[k*2+1].r-f[k*2+1].l+1)*f[k].c;
f[k*2+1].c:=f[k*2+1].c+f[k].c;
f[k].c:=0;
end;
mid:=(f[k].l+f[k].r) div 2;
if y<=mid then change(x,y,k*2)
else if x>mid then change(x,y,k*2+1)
else
begin
change(x,mid,k*2);
change(mid+1,y,k*2+1);
end;
f[k].w:=f[k*2].w+f[k*2+1].w;
end;

function add(x,y,k:longint):int64;
var mid:longint;
begin
if (f[k].l=x)and(f[k].r=y) then
exit(f[k].w);
if f[k].c<>0 then
begin
f[k*2].w:=f[k*2].w+(f[k*2].r-f[k*2].l+1)*f[k].c;
f[k*2].c:=f[k*2].c+f[k].c;
f[k*2+1].w:=f[k*2+1].w+(f[k*2+1].r-f[k*2+1].l+1)*f[k].c;
f[k*2+1].c:=f[k*2+1].c+f[k].c;
f[k].c:=0;
end;
mid:=(f[k].l+f[k].r) div 2;
if y<=mid then exit(add(x,y,k*2))
else if x>mid then exit(add(x,y,k*2+1))
else
exit(add(x,mid,k*2)+add(mid+1,y,k*2+1));
end;

function gcd(a,b:int64):int64;
begin
if a mod b=0 then exit(b)
else exit(gcd(b,a mod b));
end;

begin
assign(input,'classroom.in');reset(input);
assign(output,'classroom.out');rewrite(output);
readln(n,m);
if (n<=5000)and(m<=5000) then
begin
for i:=1 to n do
read(a[i]);
readln;
for k:=1 to m do
begin
read(z);
if z=1 then
begin
readln(x,y,p);
for i:=x to y do
a[i]:=a[i]+p;
end;
if z=2 then
begin
readln(x,y);
ans:=0;
for i:=x to y do
ans:=ans+a[i];
if ans=0 then
begin
writeln('0/1');
continue;
end;
num:=y-x+1;
o:=gcd(ans,num);
ans:=ans div o;
num:=num div o;
writeln(ans,'/',num);
end;
if z=3 then
begin
readln(x,y);
ans:=0;
sum:=0;
for i:=x to y do
ans:=ans+a[i];
if ans=0 then
begin
writeln('0/1');
continue;
end;
num:=y-x+1;
for i:=x to y do
sum:=sum+(a[i]*num-ans)*(a[i]*num-ans);
if sum=0 then
begin
writeln('0/1');
continue;
end;
num:=num*num*num;
o:=gcd(sum,num);
sum:=sum div o;
num:=num div o;
writeln(sum,'/',num);
end;
end;
close(input);
close(output);
halt; 

end;
for i:=1 to n do
read(a[i]);
built(1,n,1); 
for i:=1 to m do
begin
read(z);
if z=1 then
begin
readln(x,y,p);
change(x,y,1);
end;
if z=2 then
begin
readln(x,y);
ans:=add(x,y,1);
if ans=0 then
begin
writeln('0/1');
continue;
end;
num:=y-x+1;
o:=gcd(ans,num);  
ans:=ans div o;
num:=num div o;
writeln(ans,'/',num);
end;
end;
close(input);
close(output);
end.
N32串口DMA接收不定长数据:空闲中断与DMA通道的协同处理 本文详细解析了在N32系列MCU中,利用串口空闲中断与DMA通道协同处理不定长数据的核心机制与实战方法。通过剖析空闲中断的触发时机、DMA的配置要点以及两者协同工作的关键时序,提供了避免数据错乱的避坑指南和完整的代码实现,旨在帮助开发者构建高效、可靠的嵌入式串口通信子系统。 阅读详情

相关推荐

当GO.db安装失败时,生物信息学新手应该知道的5个底层逻辑

本文为生物信息学新手提供了解决GO.db安装失败的5个关键底层逻辑,包括网络连接与镜像源设置、版本兼容性检查、依赖关系管理、SQLite存储机制理解以及调试技巧。特别针对Bioconductor的GO.db包安装问题,详细介绍了如何通过切换国内镜像、管理版本冲突和解决依赖问题来成功安装,帮助用户高效克服常见安装障碍。

weixin_29062823的博客 407

【HDU】5930 GCD【暴力+线段树二分】

题目链接:GCD首先以每个点作为右端点的相同区间gcd的左端点构成一个区间,则这些区间最多只有log个。nlogn暴力预处理出每个gcd值的个数。 考虑修改第i个点值对所有gcd值的影响,影响的gcd值肯定是包含i的区间。把所有以i为右端点的gcd值区间取出来,i为左端点的也取出来,取的方法用线段树上二分(比较简单,就不细说了),然后左边和右边最多各logn个,所以logn*logn暴力更新就好了

poursoul 2031

从AMCL到SLAM Toolbox:在Nav2中实现高精度纯定位的实践指南

本文详细介绍了从AMCL迁移到SLAM Toolbox纯定位模式的实践指南,帮助开发者在Nav2中实现高精度定位。通过对比AMCL与SLAM Toolbox的性能差异,提供环境配置、参数调优、Nav2集成等关键步骤,显著提升机器人在动态环境中的定位精度和重定位效率。

weixin_29292535的博客 148

线段树暴力

#include<bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define per(i,a,b) for(int i=(a);i>=(b);i--) #define ll long long using namespace std; const ll inf=1e8; const int N=2...

Shelter 354

uniapp:K线图,支持H5,APP

K线,1分钟搞定。备注详细,无需理解,直接复制即可。

sunluyi的博客 4573

OLLAMA_HOST环境变量设置全攻略:从127.0.0.1到局域网共享的完整配置

本文详细解析了OLLAMA_HOST环境变量的核心作用与配置方法,指导用户如何将Ollama服务从仅限本机访问(127.0.0.1)扩展到局域网共享。文章涵盖了macOS、Linux、Windows三大平台的实战配置步骤,并提供了安全加固、性能优化及常见故障排查方案,是解决多设备协作访问本地AI模型的完整指南。

weixin_28455801的博客 1896

洛谷P2122 还教室

题目背景还记得 NOIP 2012 提高组 Day2 中的借教室吗?时光飞逝,光阴荏苒,两年过去了,曾经借教室的同学们纷纷归还自己当初租借的教室。请你来解决类似于借教室的另一个问题。题目描述在接受借教室请求的 n 天中,第 i 天剩余的教室为 ai个。作为大学借教室服务的负责人,你需要完成如下三种操作共 m 次:① 第 l 天到第 r 天,每天被归还 d 个教室。② 询问第 l 天到第 r 天教室...

蒟蒻的博客 388

【产品经理修炼之道】- 优惠券系统从入门到精通(二)

在电商平台中,优惠券的使用场景与频次都很高。那么如何做好一个优惠券系统呢?本文总结了相关流程和设计思路,希望对你有所帮助。上一篇与大家分享了架构中的前端应用、生命周期、优惠券管理中OpenAPI 、基础系统,今天继续与大家分享架构图中优惠券模板部分。

xiaoli8748的专栏 1290

借教室续

Description在接受借教室请求的n 天中,第i 天剩余的教室为ai个。作为大学借教室服务的负责人,你需要完成如下三种操作共m次: ① 第 l 天到第r 天,每天被归还d 个教室。 ② 询问第l 天到第r 天教室个数的平均数。 ③ 询问第l 天到第r 天教室个数的方差。 Input第一行包括两个正整数n 和m,其中n 为借教室的天数,m为操作次数。 接下来一行,共包含n个整数,第i 个整数表示

magical_qting的博客 842

AI Agent在核电站安全监控中的应用

核电站作为一种高效的能源生产设施,其安全问题一直是全球关注的焦点。任何安全事故都可能导致严重的人员伤亡、环境污染和经济损失。传统的核电站安全监控系统主要依赖于人工操作和固定规则的监控算法,存在监控效率低、无法实时应对复杂情况等问题。本文章的目的在于探讨如何利用AI Agent技术提升核电站安全监控的智能化水平,实现实时、准确的监测和智能决策。范围涵盖了AI Agent的基本原理、在核电站安全监控中的应用场景、相关算法和数学模型,以及实际项目的开发和应用。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 369

安装glibc出现../sysdeps/nptl/pthread.h:744:47:error:argument 1 of type ‘struct __jmp_buf_tag *‘ 解决方案

本文主要介绍了安装glibc出现…/sysdeps/nptl/pthread.h:744:47:error:argument 1 of type ‘struct __jmp_buf_tag *’ 解决方案,希望能对使用Linux的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 12万+

Master of GCD(分块大法)--优雅的暴力

题目:Master of GCD 题意: 数据: 2 5 3 1 3 2 3 5 2 1 5 3 6 3 1 2 2 5 6 2 1 6 2 题意:角标1~n之间的数默认为1,通过m次修改区间[l, r]乘以2或者3,最后输出坐标1~n之间最大公约数。 思路:更新乘以2或者3的次数,分别找到最小更新2的次数p和更新3的次数q,然后2^p*3^q就是最后的结果。 代码: #in...

REfusing的博客 780

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

洛谷 题解 P1083 【借教室】

0x00 先看数据范围 $ 1≤n,m≤10^6 $,第一反应 \(O(nlogn)\) 0x01 5 pts 直接输出 '0' 即可。 不要问我怎么知道输出 '0' 可以拿 5 pts。 保持微笑.jpeg *1 0x02 40~50 pts 考虑暴力。 按照题意枚举即可。 核心伪代码如下: 定义 n, m 为 int 型变量 定义 r 为 int 型数组,大小为 Max_N 读入 n, m...

weixin_30877227的博客 220

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

vijos p1782——借教室(noip2012提高组第2题)

描述 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,LLQ自然希望编程解决这个问题。LLQ需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从第sj...

weixin_30528371的博客 103

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

3103. 【NOIP2012提高组】借教室—线段树

Description

Fly_with_dream的博客 327

蓝桥杯备考-----》差分数组+二分答案 借教室

这道题我们第一个想法就是差分数组,但是差分数组的话我们每进行完一次操作都要还原一下数组看看有没有违规的值,时间复杂度就是n平方了,那就和暴力没啥区别了呀》第二个想法一定是线段树,but 杀鸡焉用牛刀。这时候我们的时间复杂度就是logM*N了,我们可以用二分答案配合差分数组。我们的订单编号是有个二段性的。

2301_81772249的博客 414

[NOIP2012 提高组] 借教室

在这道题里面,我们看到了差分及前缀和的应用,既然差分与前缀和都行,那么我们可以热烈欢迎线段树(树状貌似也还行?)做法……

wo_ai_luo_的博客 682

LeetCode --- 452周赛

LeetCode --- 452周赛 --- 二进制枚举子集 + 模拟 + bfs & vis数组状态设计 + 线段树

V_zjs的博客 721

[Codevs] 1217 借教室

1217 借教室 2012年NOIP全国联赛提高组 提高组day2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 测试通过 Accepted 总耗时: 2256 ms 题目描述 Description 在大学期间,经常需要租借教室。...

weixin_30609331的博客 67

codevs1217 luogu1083 借教室

现在看题都是一眼暴力的啊 暴力真的会出奇迹 真的是想不到二分 顶多想想线段树但是不会敲【T^T 45分纯暴力 #include #define maxn 100001 using namespace std; template void read(T &x){ x=0;int f=1;char ch=getchar(); for(;!isdigit(ch);ch=g

XH's 264

P1083 [NOIP2012 提高组] 借教室 题解

P1083 [NOIP2012 提高组] 借教室 题解

yaosichengalpha的博客 1162

P1083 [NOIP2012 提高组] 借教室

可以线段树の二分||||=||||黍姐姐!!!!

CH_canghan的博客 836

LPOJ 欢迎来到实力至上主义的教室 —— 线段树合并

题目链接:点我啊╭(╯^╰)╮ 题目大意:     中文题 解题思路:     线段树维护答案,每个叶子节点维护一颗权值线段树     合并右 kkk 个点就是先 mergemergemerge ,然后二分删掉 kkk 左边的点 核心:线段树合并 正常合并: #include&l...

Scar_Halo 347

借教室

在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。 我们需要处理接下来nn天的借教室信息,其中第ii天学校有r_iri​个教室可供租借。共有mm份订单,每份订单用三个正整数描述,分别为d_j,s_j,t_jdj​,sj​,t...

denghuan6474的博客 212

【NOIP2012提高组】借教室

90分暴力解法: 用线段树,初始值为该天的教室数,每个人来申请的时候在这段区间减去借走的数,然后查询最小值是否小于0,是就输出-1,否则继续。 (其实在vijos是可以直接A的,他们的评测机太快了) #include <iostream> #define maxn 1000005 using namespace std; void scan(int &...

anlongshi2245的博客 132
上一篇: Tyvj 1231 跳格子I (数学,欧拉函数)(高精度)
下一篇: WikiOI 3943 数学奇才琪露诺 (数学+技巧)
CodeOnce
博客等级 码龄10年 3粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值