题目背景

还记得 NOIP 2012 提高组 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”(不含引号)。

输入输出样例

输入样例#1:

5 4
1 2 3 4 5
1 1 2 3
2 2 4
3 2 4
3 1 5

输出样例#1:

4/1
2/3
14/25

说明

对于全部测试数据满足:1 ≤ l ≤ r ≤ n,0 ≤ ai ≤ 10,1 ≤ d ≤ 3,操作 1 的数量

不超过 10%。注意:ai和 d 的范围很小及操作 1 数量很少的原因是为了保证答案

的分子不会很大,以防止答案的分子溢出 64 位整数的范围,这与题目做法无关。

线段树裸题。。。

附代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#define LSON rt<<1
#define RSON rt<<1|1
#define DATA(x) a[x].data
#define MEXP(x) a[x].mexp
#define SIGN(x) a[x].c
#define LSIDE(x) a[x].l
#define RSIDE(x) a[x].r
#define WIDTH(x) (RSIDE(x)-LSIDE(x)+1)
#define MAXN 100010
using namespace std;
int n,m;
struct node{long long data,c;unsigned long long mexp;int l,r;
}a[MAXN<<2];
inline int read(){int date=0,w=1;char c=0;while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}return date*w;
}
long long gcd(long long x,long long y){if(y==0)return x;return gcd(y,x%y);
}
inline void pushup(int rt){DATA(rt)=DATA(LSON)+DATA(RSON);MEXP(rt)=MEXP(LSON)+MEXP(RSON);
}
inline void pushdown(int rt){if(!SIGN(rt)||LSIDE(rt)==RSIDE(rt))return;SIGN(LSON)+=SIGN(rt);MEXP(LSON)+=SIGN(rt)*SIGN(rt)*WIDTH(LSON)+2*SIGN(rt)*DATA(LSON);DATA(LSON)+=SIGN(rt)*WIDTH(LSON);SIGN(RSON)+=SIGN(rt);MEXP(RSON)+=SIGN(rt)*SIGN(rt)*WIDTH(RSON)+2*SIGN(rt)*DATA(RSON);DATA(RSON)+=SIGN(rt)*WIDTH(RSON);SIGN(rt)=0;
}
void buildtree(int l,int r,int rt){int mid;LSIDE(rt)=l;RSIDE(rt)=r;SIGN(rt)=0;if(l==r){DATA(rt)=read();MEXP(rt)=DATA(rt)*DATA(rt);return;}mid=l+r>>1;buildtree(l,mid,LSON);buildtree(mid+1,r,RSON);pushup(rt);
}
void update(int l,int r,long long c,int rt){int mid;if(l<=LSIDE(rt)&&RSIDE(rt)<=r){SIGN(rt)+=c;MEXP(rt)+=c*c*WIDTH(rt)+2*c*DATA(rt);DATA(rt)+=c*WIDTH(rt);return;}pushdown(rt);mid=LSIDE(rt)+RSIDE(rt)>>1;if(l<=mid)update(l,r,c,LSON);if(mid<r)update(l,r,c,RSON);pushup(rt);
}
long long query_sum(int l,int r,int rt){int mid;long long ans=0;if(l<=LSIDE(rt)&&RSIDE(rt)<=r)return DATA(rt);pushdown(rt);mid=LSIDE(rt)+RSIDE(rt)>>1;if(l<=mid)ans+=query_sum(l,r,LSON);if(mid<r)ans+=query_sum(l,r,RSON);return ans;
}
unsigned long long query_mexp(int l,int r,int rt){int mid;unsigned long long ans=0;if(l<=LSIDE(rt)&&RSIDE(rt)<=r)return MEXP(rt);pushdown(rt);mid=LSIDE(rt)+RSIDE(rt)>>1;if(l<=mid)ans+=query_mexp(l,r,LSON);if(mid<r)ans+=query_mexp(l,r,RSON);return ans;
}
inline void single(long long &s1,long long &s2){long long k=gcd(s1,s2);s1/=k;s2/=k;
}
int main(){int f,x,y,k;n=read();m=read();buildtree(1,n,1);while(m--){f=read();x=read();y=read();switch(f){case 1:{k=read();update(x,y,k,1);break;}case 2:{long long s1=query_sum(x,y,1),s2=y-x+1;if(s1==0)s2=1;else single(s1,s2);printf("%lld/%lld\n",s1,s2);break;}case 3:{long long s1=query_sum(x,y,1),s2=query_mexp(x,y,1),s3=y-x+1,k;s2=s2*s3-s1*s1;s3*=s3;if(s2==0)s3=1;else single(s2,s3);printf("%lld/%lld\n",s2,s3);break;}}}return 0;
}

洛谷P2122 还教室相关推荐

  1. 这么多都变了,洛谷4还会远吗?

    凡是洛谷的用户应该都知道,洛谷4,是一个大家都很向往的洛谷版本,那么什么时候推出,就成了都想知道的话题. 于是,我们就来寻找一些蛛丝马迹,来推测其出现的时间. NO.1:右下角增添陶片放逐栏 陶片放逐 ...

  2. [二分][前缀和]洛谷 P1083 借教室

    题意: 有n天,m个请求.n天内每天的可用教室为a_ia​i​​个,m个请求是从l到r天租借t个教室. 如果某一天的教室分配无法满足,则输出当前的订单号. 思考: 一开始根本没想到这个东西怎么二分.. ...

  3. 洛谷 P1843 奶牛晒衣服

    题目背景 熊大妈决定给每个牛宝宝都穿上可爱的婴儿装 . 于是 , 为牛宝宝洗晒衣服就成了很不爽的事情. 题目描述 熊大妈请你帮助完成这个重任 . 洗完衣服后 , 你就要弄干衣服 . 衣服在自然条件下用 ...

  4. 【bzoj3240 洛谷P1397】矩阵游戏[NOI2013](矩阵乘法+卡常)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法--然而我太弱了,一开始只想到了矩阵乘法的 ...

  5. 洛谷or牛客数据结构+算法

    栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...

  6. 洛谷 P3353 在你窗外闪耀的星星

    洛谷  P3353 在你窗外闪耀的星星 题目描述 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室, ...

  7. 【LGR-142-Div.4】洛谷入门赛 #13 考后分析与题解

    洛谷入门赛 #Round 13 比赛分析与总结 T1 魔方 题目背景 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 数据规模与约定 分析 AC代码 注意 T2 教学楼 ...

  8. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

  9. 【洛谷】【动态规划/二维背包】P1855 榨取kkksc03

    [题目描述:] ... (宣传luogu2的内容被自动省略) 洛谷的运营组决定,如果...,那么他可以浪费掉kkksc03的一些时间的同时消耗掉kkksc03的一些金钱以满足自己的一个愿望. Kkks ...

  10. 【杂题总汇】NOIP2013(洛谷P1967) 货车运输

    [洛谷P1967] 货车运输 重做NOIP提高组ing... +传送门-洛谷P1967+ ◇ 题目(copy from 洛谷) 题目描述 A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道 ...

最新文章

  1. 信息化道路上,这两家龙头企业做了什么
  2. Servlet RequestDispatcher需要注意的情况
  3. 框架-.NET:Spring.Net
  4. 【摄像头与成像】长文详解RAW图的来龙去脉
  5. [云炬创业基础笔记]商业模式在现代创业中的重要性
  6. [深度学习基础] 1. 图像识别问题的挑战及数据驱动过程
  7. jsf教程_JSF范围教程– JSF / CDI会话范围
  8. crontab 日志_聊聊老板让我删除日志文件那些事儿
  9. Spring bean 不被 GC 的真正原因
  10. Oracle,Mysql,Sqlserver数据库连接串(总爱忘,留着备用)
  11. mysql数据库大小 shell_shell脚本操作mysql数据库
  12. 2年CFA三级考试连过的我,全靠笔记多!(无金融背景)
  13. WPS Office 国际版 添加中文语言包 及相关问题
  14. less转换css及html里面JS的引入
  15. Thinking in java 第21章 并发 wait() 与 notifyAll()
  16. 数据结构应用题大题笔记
  17. 仿微信朋友圈拍照上传
  18. 算法系列1《DES》
  19. 景联文科技提供智能手表健康监测数据采集服务,涵盖血压血氧心率睡眠数据
  20. 蓝桥杯 基础练习 阶乘计算(C语言)

热门文章

  1. 【人工智能】人工智能二——遗传算法的基本概念遗传算法的基本算法(编码群体设定适应度函数选择交叉变异遗传算法步骤)解决带约束的函数优化问题多目标的遗传算法遗传算法的改进算法
  2. python装饰器两层和三层区别,Python装饰器和装饰器图案有什么区别?
  3. AVI视频文件损坏修复
  4. UI——day15.H5和小程序的设计
  5. u盘写保护怎么才能真正去掉
  6. PHPCMS 前台模板集合
  7. 【周总结】博客第一周小结SSL暑假训练第二周小结
  8. 排序数据图-R/python
  9. 数据分析最有用的25个Matplotlib图表
  10. 1688API item_search_img - 拍立淘搜索淘宝商品