[COGS 2264]魔法传输

题目

自从看了《哈利波特》,小Y就十分渴望获得魔法值。于是他和一群向往魔法的孩子(当然这些孩子们都是不会魔法的)来到了哈利波特的家,大家坐成一排。哈利波特会不时的给大家传输魔法。

哈利每次会选择一个区间,给这个区间里的孩子们传输魔法:最左边的孩子给一点,第二个给两点……哈利有时会突然问你某一个孩子已经有了多少魔法。

INPUT

第一行两个正整数 N,M,表示有 N 个孩子,哈利有 M 次操作。

接下来 M 行,每行代表一个操作。第一个字符为 ci,若 ci=‘C’则此次操作为传送魔法操作,接下来会有两个整数Li,Ri,表示此次送魔法值的区间。若 ci=‘Q’则此次操作为询问操作,接下来一个整数xi,表示询问第xi个孩子当前的魔法值。

OUTPUT

对于每组询问输出一行,仅包含一个整数,表示答案对 1,000,000,007 取模(mod)的结果。

SAMPLE

INPUT

3 4

C 1 3

Q 2

C 2 3

Q 2

OUTPUT

2

3

数据规模

对于 30%的数据,N,M≤1,000;

对于 100%的数据,N,M≤100,000。

解题报告

一道难得的好题= =

实际上这道题除了想出思路,哪都很容易= =

这道题的主要难度就在于如何更改上,等差数列更改让一些数据结构显得很吃力,但实则不然,我们完全可以用线段树来实现这个东西

我们首先思考,在线段树中如何更新。

我们发现,我们需要在一段区间更新一段以$1$为首项的等差数列,那么,我们假如只在区间的每一个点加$1$,效果会怎样?

显然这时候如果单点求和是不行的,但如果我们求前缀和的话,我们就可以得到等差数列求和的效果了不是吗?

所以,我们可以看出,这是一道在线段树上的差分题。

我们只需要在区间中的每一个点都加上$1$,右端点右面一个点减去$r-l+1$就可以达到差分的目的,查询时只需要查询单点前缀和即可

 #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
inline int read(){
int sum();
char ch(getchar());
for(;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';sum=sum*+(ch^),ch=getchar());
return sum;
}
typedef long long L;
int n,m;
L sum[],add[];
const L mod=;
inline void pushup(int i){
sum[i]=(sum[i<<]+sum[i<<|])%mod;
}
inline void pushdown(int i,int len){
if(add[i]){
add[i<<]+=add[i];
add[i<<|]+=add[i];
sum[i<<]+=add[i]*(len-(len>>));
sum[i<<]%=mod;
sum[i<<|]+=add[i]*(len>>);
sum[i<<|]%=mod;
add[i]=;
}
}
inline void update(int ll,int rr,L w,int l,int r,int i){
if(ll<=l&&r<=rr){
add[i]+=w;
sum[i]+=w*(L)(r-l+);
sum[i]%=mod;
return;
}
pushdown(i,r-l+);
int mid((l+r)>>);
if(ll<=mid)
update(ll,rr,w,l,mid,i<<);
if(mid<rr)
update(ll,rr,w,mid+,r,i<<|);
pushup(i);
}
inline L query(int ll,int rr,int l,int r,int i){
if(ll<=l&&r<=rr)
return sum[i];
pushdown(i,r-l+);
L ret();
int mid((l+r)>>);
if(ll<=mid)
ret=(ret+query(ll,rr,l,mid,i<<))%mod;
if(mid<rr)
ret=(ret+query(ll,rr,mid+,r,i<<|))%mod;
return ret;
}
char op[];
inline int gg(){
freopen("magics.in","r",stdin);
freopen("magics.out","w",stdout);
n=read(),m=read();
while(m--){
scanf("%s",op);
if(op[]=='Q'){
int x(read());
printf("%lld\n",query(,x,,n,)%mod);
}
else{
int x(read()),y(read());
update(x,y,,,n,);
update(y+,y+,-(y-x+),,n,);
}
}
return ;
}
int K(gg());
int main(){;}

[COGS 2264]魔法传输的更多相关文章

  1. cogs 1685 魔法森林

    /* 写了个傻逼二分套二分,真的傻逼了,我这tmd是在贪心呐,70分满满的人品 */ #include<iostream> #include<cstdio> #include& ...

  2. COGS 1144. [尼伯龙根之歌] 精灵魔法

    ★   输入文件:alfheim.in   输出文件:alfheim.out   简单对比时间限制:1 s   内存限制:128 MB [题目背景] 『谜题在丛林中散发芳香绿叶上露珠跳跃着歌唱火焰在隐 ...

  3. cogs 10. 信号无错传输

    10. 信号无错传输 ★★☆   输入文件:dlj.in   输出文件:dlj.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 为提高传递信息的保密性和可靠性,两个军事 ...

  4. JavaScript读二进制文件并用ajax传输二进制流

    综合网上多个教程,加上自己实践得出的方法,目前能够兼容谷歌.IE11.IE10. htmlbody里的内容,没什么特殊的. <div id="dConfirm"> &l ...

  5. 用Flask实现视频数据流传输

    Flask 是一个 Python 实现的 Web 开发微框架.这篇文章是一个讲述如何用它实现传送视频数据流的详细教程. 我敢肯定,现在你已经知道我在O’Reilly Media上发布了有关Flask的 ...

  6. COGS——T 826. [Tyvj Feb11] GF打dota

    http://www.cogs.pro/cogs/problem/problem.php?pid=826 ★★☆   输入文件:dota.in   输出文件:dota.out   简单对比时间限制:1 ...

  7. 苹果强制使用HTTPS传输了怎么办?——关于HTTPS,APP开发者必须知道的事

    WeTest 导读 2017年1月1日起,苹果公司将强制使用HTTPS协议传输.本文通过对HTTPS基础原理和通信过程内容的讲解,介绍APP开发者在这个背景下的应对办法. 几周前,我们在<htt ...

  8. 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(二) - 信令传输超时设计

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/9DJxipJaaBC8yC-buHgnTQ 作者简介: ...

  9. C#开源实现MJPEG流传输

    本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 许久以前写了篇文章<基于.NET打造IP智能网络视频监控系统>,记录和介绍了自己几年来积 ...

随机推荐

  1. MSP430:串口输出

    初始化 void Uart_Init(void) { BCSCTL1 = CALBC1_1MHZ; // Set DCO DCOCTL = CALDCO_1MHZ; P1SEL = BIT1 + BI ...

  2. 云栖社区> > 正文 永久免费SSL安全证书Letsencrypt安装使用方法

    ./letsencrypt-auto certonly --standalone --email admin@thing.com -d thing.com -d www.thing.com

  3. P1452 Beauty Contest

    传送门 求凸包周长,用旋转卡壳,具体可见yyb大佬的博客 顺便一提这题暴力+随机化也能过 暴力代码 //minamoto #include<bits/stdc++.h> #define r ...

  4. ASP.NET MVC5 之路由器

    这篇博客介绍的很详细 http://www.cnblogs.com/yaozhenfa/p/asp_net_mvc_route_1.html

  5. [转]在 Linux 下使用 RAID

    转自:http://www.linuxidc.com/Linux/2015-08/122191.htm RAID 的意思是廉价磁盘冗余阵列(Redundant Array of Inexpensive ...

  6. easyui datagrid 高度布局自适应

    最近在把以前写的一个项目改成用easyui做前端.过程中遇到了不少问题.其中一个就是datagrid不能很好的布局.想了好多办法都有局限.最后想到会不会是布局(easyui-layout)的问题,经过 ...

  7. 在Swift中,如何像Objective-C定义可选接口?

    Objective-C中的protocol里存在@optional关键字,被这个关键字修饰的方法并非必须要被实现.我们可以通过接口定义一系列方法,然后由实现接口的类选择性地实现其中几个方法.在Coco ...

  8. Python--10、生产者消费者模型

    生产者消费者模型(★) 平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度.程序中有两类角色:生产数据.消费数据实现方式:生产->队列->消费. 通过一个容器来解决生产者和消费 ...

  9. WEB开发模式浅析

    WEB技术随着互联网的崛起而崛起,又随着移动互联网的发展而呈现更加多样化的趋势. 黑暗时代:大约在2005年以前,所谓的WEB开发主要还是美工的活,HTML/CSS占主导,Dreamwaver做为页面 ...

  10. SQL基本操作——创建索引

    CREATE INDEX 语句用于在表中创建索引.在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 索引:您可以在表中创建索引,以便更加快速高效地查询数据.用户无法看到索引,它们只能被 ...