还教室 CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

【引子】
还记得 NOIP 2012 提高组 Day2 中的借教室吗?时光飞逝,光阴荏苒,两年
过去了,曾经借教室的同学们纷纷归还自己当初租借的教室。请你来解决类似于
借教室的另一个问题。
【问题描述】
在接受借教室请求的 n 天中,第 i 天剩余的教室为 a i 个。作为大学借教室服
务的负责人,你需要完成如下三种操作共 m 次:
① 第 l 天到第 r 天,每天被归还 d 个教室。
② 询问第 l 天到第 r 天教室个数的平均数。
③ 询问第 l 天到第 r 天教室个数的方差。
【输入格式】
第一行包括两个正整数 n 和 m,其中 n 为借教室的天数,m 为操作次数。
接下来一行, 共包含 n 个整数, 第 i 个整数表示第 i 天剩余教室数目为 a i 个。
接下来 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


推导一下方差

D(X)=E(X^2)-E^2(X)

线段树维护区间和和区间平方和

区间平方和 t[o].s2+=d*d*(r-l+1)+2*d*t[o].s

PS:r-l+1的平方爆int了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
;
#define m (l+r)/2
#define lson o<<1,l,m
#define rson o<<1|1,m+1,r
#define lc o<<1
#define rc o<<1|1
typedef long long ll;
inline int read(){
    ,f=;
    ;c=getchar();}
    +c-';c=getchar();}
    return x*f;
}
int n,q,flag,l,r; ll d;
struct node{
    ll s,s2,lazy;
}t[N<<];
inline void paint(int o,int l,int r,ll d){
    t[o].lazy+=d;
    t[o].s2+=d*d*(r-l+)+*d*t[o].s;
    t[o].s+=d*(r-l+);
}
inline void merge(int o){
    t[o].s=t[lc].s+t[rc].s;
    t[o].s2=t[lc].s2+t[rc].s2;
}
inline void pushDown(int o,int l,int r){
    if(t[o].lazy){
        ll d=t[o].lazy;
        paint(lson,d);
        paint(rson,d);
        t[o].lazy=;
    }
}
void build(int o,int l,int r){
    if(l==r) {ll a=read();t[o].s=a;t[o].s2=a*a;}
    else{
        build(lson);
        build(rson);
        merge(o);
    }
}
void add(int o,int l,int r,int ql,int qr,ll d){
    if(ql<=l&&r<=qr) paint(o,l,r,d);
    else{
        pushDown(o,l,r);
        if(ql<=m) add(lson,ql,qr,d);
        if(m<qr) add(rson,ql,qr,d);
        merge(o);
    }
}
ll query1(int o,int l,int r,int ql,int qr){
    if(ql<=l&&r<=qr) return t[o].s;
    else{
        pushDown(o,l,r);
        ll ans=;
        if(ql<=m) ans+=query1(lson,ql,qr);
        if(m<qr) ans+=query1(rson,ql,qr);
        return ans;
    }
}
ll query2(int o,int l,int r,int ql,int qr){
    if(ql<=l&&r<=qr) return t[o].s2;
    else{
        pushDown(o,l,r);
        ll ans=;
        if(ql<=m) ans+=query2(lson,ql,qr);
        if(m<qr) ans+=query2(rson,ql,qr);
        return ans;
    }
}
inline ll gcd(ll a,ll b){?a:gcd(b,a%b);}
void print(ll x,ll y){
    ll g=gcd(x,y);
    printf("%lld/%lld\n",x/g,y/g);
}
int main(){
    n=read();q=read();
    build(,,n);
    ;i<=q;i++){
        flag=read();l=read();r=read();
        ){d=read();add(,,n,l,r,d);}
        ){
            ll x=query1(,,n,l,r),len=r-l+;
            print(x,len);
        }else{
            ll x1=query1(,,n,l,r),x2=query2(,,n,l,r),len=r-l+;//printf("hi %lld %lld\n",x1,x2);
            print(len*x2-x1*x1,len*len);
        }
    }
}

CH Round #52 还教室[线段树 方差]的更多相关文章

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

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

  2. NOIP2012借教室[线段树|离线 差分 二分答案]

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...

  3. noip 借教室 线段树95分做法

    大致的思路是用线段树维护每个区间内部的最小值 段更新最小值 每次查某个区间的最小值是否满足租借要求 满足就借出去 update最小值 注意pushdown操作  还有一个从子区间提取答案的操作 提交地 ...

  4. Codeforces Round #218 (Div. 2) (线段树区间处理)

    A,B大水题,不过B题逗比了题意没理解清楚,讲的太不清楚了感觉= =还是英语弱,白白错了两发. C: 二分答案判断是否可行,也逗比了下...二分的上界开太大导致爆long long了...   D: ...

  5. CH模拟赛 还教室

    /* 区间操作,可以推一推式子,方差为平方的平均数-平均数的平方,维护区间和与区间平方和,平方和的维护方法类似,式子推一推就行了,注意约分 */ #include<iostream> #i ...

  6. CH Round #72树洞[二分答案 DFS&amp;&amp;BFS]

    树洞 CH Round #72 - NOIP夏季划水赛 描述 在一片栖息地上有N棵树,每棵树下住着一只兔子,有M条路径连接这些树.更特殊地是,只有一棵树有3条或更多的路径与它相连,其它的树只有1条或2 ...

  7. Bestcoder round #65 &amp;&amp; hdu 5592 ZYB&#39;s Premutation 线段树

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  8. Educational Codeforces Round 6 E. New Year Tree dfs+线段树

    题目链接:http://codeforces.com/contest/620/problem/E E. New Year Tree time limit per test 3 seconds memo ...

  9. 线段树 Codeforces Round #197 (Div. 2) D. Xenia and Bit Operations

    题目传送门 /* 线段树的单点更新:有一个交叉更新,若rank=1,or:rank=0,xor 详细解释:http://www.xuebuyuan.com/1154895.html */ #inclu ...

随机推荐

  1. eclipse配置javah命令

    1.找到javah命令所在的目录    我的为 /usr/bin/javah 2.打开eclipse     如图点击第二项 3.配置  如图 ${project_loc}/src -classpat ...

  2. jQuery之Ajax--底层接口

    1. $.ajax()方法:是jQuery最底层的Ajax实现.它的结构为:$.ajax(options).该方法只有一个参数,但在这个对象里面包含了$.ajax()方法所需要的请求设置以及回调函数等 ...

  3. 封装captcha类 -- 画图四

    <?php // 验证码类 class Captcha{ //属性 private $width; private $height; private $length; private $line ...

  4. 使用MySQL WorkBench导入数据库

    1. 在MySQL WorkBench的Server Administrator中双击要连接的数据库: 2. 点击左边的Data Import/Restore; 3. Import from Dump ...

  5. [Bundling and Minification ] 二、绑定的作用

    本篇接上一篇[Bundling and Minification ] 一.如何绑定 Bundling的作用有二,一是合并文件减少资源请求的个数缩短资源请求的时间.二是自动更新到最新js或者css,当合 ...

  6. javascript序列化json 第二篇

    这一节主要是记录父子关系的JSON生成,废话不多说,直接上代码. public partial class _default : System.Web.UI.Page { public static ...

  7. 新冲刺Sprint3(第三天)

    一.Sprint会议 更新商品价格.商品描述功能已经完成了,搜索商品功能也正在准备了. 以下是部分功能真机测试下的效果图:     二.Sprint周期 看板: 燃尽图:

  8. iOS开发中的错误整理,通过storyboard做项目,遇到view看不见,或者view被压缩的情况

    前言:在网易新闻的练习中遇到了这个错误 注意:练习中遇到了如图的bug,主要是因为用storyboard布局 600 * 600   显示的时候要经过自动布局,缩小到相应手机的屏幕大小.也就是有的尺寸 ...

  9. Drozer安装

    (1)JDK安装 http://www.cnblogs.com/linbc/p/4319509.html http://blog.csdn.net/qq_31988895/article/detail ...

  10. 新手学vim配置

    我是新手啦,以前都没接触过Vim编辑器,所以感觉不怎么顺手,毕竟还没有用习惯.也没有什么基础,所以在配置的时候就一直在网上查资料....想要把vim编辑器配置成VS的话可以参考这个:http://ww ...