/*
区间操作,可以推一推式子,方差为平方的平均数-平均数的平方,维护区间和与区间平方和,平方和的维护方法类似,式子推一推就行了,注意约分
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define ll long long
#define fo(i,l,r) for(int i = l;i <= r;i++)
#define fd(i,l,r) for(int i = r;i >= l;i--)
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int N = ;
ll read(){
ll x=,f=;
char ch=getchar();
while(!(ch>=''&&ch<='')){if(ch=='-')f=-;ch=getchar();};
while(ch>=''&&ch<=''){x=x*+(ch-'');ch=getchar();};
return x*f;
}
ll gcd(ll a,ll b){return b==?a:gcd(b,a%b);}
struct fs{
ll son;
ll mo;
void yf(){
if(son == || mo == ){
if(son == ) mo = ;
return;
}
ll d = gcd(son,mo);
son /= d;
mo /= d;
}
void clear(ll a,ll b){
son = a;
mo = b;
yf();
}
fs operator + (fs b){
fs a=*this;
ll d = gcd(a.mo,b.mo);
ll lcm = a.mo / d * b.mo;
a.son *= lcm / a.mo;
b.son *= lcm / b.mo;
a.son += b.son;
a.mo = lcm;
a.yf();
return a;
}
fs operator - (fs b){
fs a=*this;
ll d = gcd(a.mo,b.mo);
ll lcm = a.mo / d * b.mo;
a.son *= lcm / a.mo;
b.son *= lcm / b.mo;
a.son -= b.son;
a.mo = lcm;
if(!a.son) a.mo = ;
else a.yf();
return a;
}
fs operator * (fs b){
fs a=*this;
a.son *= b.son;
a.mo *= b.mo;
a.yf();
return a;
}
fs operator / (ll b){
fs a =*this;
a.mo *= b;
a.yf();
return a;
}
bool operator < (fs b){
return son*b.mo < mo*b.son;
}
fs operator - (ll k){
fs b,a=*this;
b.clear(k,);
if(a<b) swap(a,b);
return a-b;
}
void print(){
printf("%I64d/%I64d\n",son,mo);
}
}ans,fd;
int n,m;ll val[N];
ll sumv[N<<],addv[N<<],powv[N<<];
ll cmd,op,ql,qr,qv,ans1,ans2;
void maintain(int rt){
sumv[rt] = sumv[rt<<] + sumv[rt<<|];
powv[rt] = powv[rt<<] + powv[rt<<|];
}
void pushdown(int l,int r,int rt){
int m = (l + r) >> ;
if(!addv[rt]) return;
addv[rt<<] += addv[rt];
addv[rt<<|] += addv[rt];
powv[rt<<] += *addv[rt]*sumv[rt<<] + (m-l+)*addv[rt]*addv[rt];
powv[rt<<|] += *addv[rt]*sumv[rt<<|] + (r-m)*addv[rt]*addv[rt];
sumv[rt<<] += addv[rt] * (m-l+);
sumv[rt<<|] += addv[rt] * (r-m);
addv[rt] = ;
}
void build(int l,int r,int rt){
addv[rt] = ;
if(l==r){
powv[rt] = val[l]*val[l];
sumv[rt] = val[l];
return;
}
int m = (l + r) >> ;
build(lson);
build(rson);
maintain(rt);
}
void change(ll l,ll r,int rt){
if(ql <= l && qr >= r){
addv[rt] += qv;
powv[rt] += *qv*sumv[rt] + qv*qv*(r-l+);
sumv[rt] += qv*(r-l+);
return;
}
pushdown(l,r,rt);
int m = (l + r) >> ;
if(ql <= m) change(lson);
if(qr > m) change(rson);
maintain(rt);
}
ll query(int l,int r,int rt){
if(ql <= l && qr >= r){
if(op == ) return sumv[rt];
else return powv[rt];
}
pushdown(l,r,rt);
int m = (l + r) >> ;
ll ret = ;
if(ql <= m) ret += query(lson);
if(qr > m) ret += query(rson);
return ret;
}
int main(){
freopen("classroom.in","r",stdin);
freopen("classroom.out","w",stdout);
n =read();m=read();
fo(i,,n) val[i]=read();
build(,n,);
fo(i,,m){
cmd=read();ql=read();qr=read();
if(cmd==){
qv=read();
change(,n,);
}else if(cmd == ){
op = ;
ans1=query(,n,);
ans2=(qr-ql+);
ans.clear(ans1,ans2);
ans.print();
}else if(cmd == ){
op = ;
ans1=query(,n,);
ans2=(qr-ql+);
ans.clear(ans1,ans2);
ans1=ans2=;
op = ;
ans1=query(,n,);
ans2=(qr-ql+);
fd.clear(ans1,ans2);
fd = fd*fd;
ans = ans-fd;
ans.print();
}
}
return ;
}

CH模拟赛 还教室的更多相关文章

  1. CH Round #52 还教室[线段树 方差]

    还教室 CH Round #52 - Thinking Bear #1 (NOIP模拟赛) [引子]还记得 NOIP 2012 提高组 Day2 中的借教室吗?时光飞逝,光阴荏苒,两年过去了,曾经借教 ...

  2. CH模拟赛 皇后游戏

    /* 做的时候手推了一下n=2的四种情况,再排一下序就可以了,证明不是很严谨,但我想这就行了,毕竟全是套路 */ #include<iostream> #include<cstdio ...

  3. CH模拟赛 拆地毯

    /* MST,注意只能加K条边,但是备选是M条边 */ #include<iostream> #include<cstdio> #include<string> # ...

  4. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

  5. 模拟赛小结:2017 China Collegiate Programming Contest Final (CCPC-Final 2017)

    比赛链接:传送门 前期大顺风,2:30金区中游.后期开题乏力,掉到银尾.4:59绝杀I,但罚时太高卡在银首. Problem A - Dogs and Cages 00:09:45 (+) Solve ...

  6. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  7. CH Round #49 - Streaming #4 (NOIP模拟赛Day2)

    A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...

  8. CH Round #54 - Streaming #5 (NOIP模拟赛Day1)

    A.珠 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2354%20-%20Streaming%20%235%20(NOIP模拟赛Day1)/珠 题解:sb题, ...

  9. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

随机推荐

  1. 阿里云ECS服务器配置(Ubuntu+JAVA+Tomcat+Mysql)

    最近购买了阿里云的ECS服务器,就服务器的安装配置做简要的说明,也方便日后查看. 1.远程操作服务器 远程操作服务器可以使用putty工具,下载地址:http://pan.baidu.com/s/1q ...

  2. JavaScript 解析 Django Python 生成的 datetime 数据 时区问题解决

    JavaScript 解析 Django/Python 生成的 datetime 数据 当Web后台使用Django时,后台生成的时间数据类型就是Python类型的. 项目需要将几个时间存储到数据库中 ...

  3. 新手!mass 设置问题

    mass就是你那个物体的质量啊质量越大,惯性也越大重力也越大.假如你的刚体的mass为1,那么你只要给这个物体9.81N向上的力,你就可以抵消重力,让这个物体悬浮着:但假如这个物体的mass为10,你 ...

  4. HDU 1564 Play a game(巴什博弈)

    New Year is Coming! ailyanlu is very happy today! and he is playing a chessboard game with 8600. The ...

  5. 分布式监控系统Zabbix-3.0.3-完整安装记录(7)-使用percona监控MySQL

    前面已经介绍了分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳.要想更加仔细的监控Mysql,业内同学们都会选择 ...

  6. python_接口开发

    一.GET和POST请求from flask import Flask,jsonifydata = { 'name':'Jerry', 'sex':'男', 'age':'18'}app = Flas ...

  7. 前端自动化测试 —— TDD环境配置(React+TypeScript)

    欢迎讨论与指导:) 前言 TDD -- Test-Drive Development是测试驱动开发的意思,是敏捷开发中的一项核心实践和技术,也是一种测试方法论.TDD的原理是在开发功能代码之前,先编写 ...

  8. git --help出来的命令 + eclipse里用git小记

    用法:git [--version] [--help] [-C <path>] [-c name=value]           [--exec-path[=<path>]] ...

  9. 解读ASP.NET 5 & MVC6系列(14):View Component

    在之前的MVC中,我们经常需要类似一种小部件的功能,通常我们都是使用Partial View来实现,因为MVC中没有类似Web Forms中的WebControl的功能.但在MVC6中,这一功能得到了 ...

  10. mac机上搭建php56/nginx 1.8.x/thinkphp 3.2.x/gearman扩展/seaslog扩展/redis扩展环境

    php的各种扩展配置起来实在不容易,记录一下备忘: 一.php56 安装 虽然php7出来了,但是没用过,不知道有没有坑,这里仍然使用php5.6版本 1.1 安装php/php-pfm brew u ...