[COGS 2264]魔法传输
[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]魔法传输的更多相关文章
- cogs 1685 魔法森林
		/* 写了个傻逼二分套二分,真的傻逼了,我这tmd是在贪心呐,70分满满的人品 */ #include<iostream> #include<cstdio> #include& ... 
- COGS 1144. [尼伯龙根之歌] 精灵魔法
		★ 输入文件:alfheim.in 输出文件:alfheim.out 简单对比时间限制:1 s 内存限制:128 MB [题目背景] 『谜题在丛林中散发芳香绿叶上露珠跳跃着歌唱火焰在隐 ... 
- cogs 10. 信号无错传输
		10. 信号无错传输 ★★☆ 输入文件:dlj.in 输出文件:dlj.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 为提高传递信息的保密性和可靠性,两个军事 ... 
- JavaScript读二进制文件并用ajax传输二进制流
		综合网上多个教程,加上自己实践得出的方法,目前能够兼容谷歌.IE11.IE10. htmlbody里的内容,没什么特殊的. <div id="dConfirm"> &l ... 
- 用Flask实现视频数据流传输
		Flask 是一个 Python 实现的 Web 开发微框架.这篇文章是一个讲述如何用它实现传送视频数据流的详细教程. 我敢肯定,现在你已经知道我在O’Reilly Media上发布了有关Flask的 ... 
- COGS——T 826. [Tyvj Feb11] GF打dota
		http://www.cogs.pro/cogs/problem/problem.php?pid=826 ★★☆ 输入文件:dota.in 输出文件:dota.out 简单对比时间限制:1 ... 
- 苹果强制使用HTTPS传输了怎么办?——关于HTTPS,APP开发者必须知道的事
		WeTest 导读 2017年1月1日起,苹果公司将强制使用HTTPS协议传输.本文通过对HTTPS基础原理和通信过程内容的讲解,介绍APP开发者在这个背景下的应对办法. 几周前,我们在<htt ... 
- 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(二) - 信令传输超时设计
		本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/9DJxipJaaBC8yC-buHgnTQ 作者简介: ... 
- C#开源实现MJPEG流传输
		本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 许久以前写了篇文章<基于.NET打造IP智能网络视频监控系统>,记录和介绍了自己几年来积 ... 
随机推荐
- SQL使用IN参量不能超过1000的表现形式以及解决办法
			如果出现这个错误说明你传的参量是超过了一千个值:列如,你拼接了1001个id: 如何解决那,我这里提供两种方法: 1.每1000条加一个or in 列: 原:select p.* from t_pre ... 
- PCB ODB++(Gerber)图形绘制实现方法
			这里讲解一下用net解析PCB图形绘制实现方法 一.解析PCB图形绘制实现 解析PCB图形,说简单也非常简单,先说一下,PCB Gerber图形由:点,线,弧,铜皮,文字 5类元素组成,通常简写为:P ... 
- ArgumentError: You need to supply at least one validatio
			创建: 2017/10/02 意思: validate没有内容 例: validates :title 
- E20170919-hm
			infinity n. <数>无穷大; 无限的时间或空间; 
- bzoj2427:[HAOI2010]软件安装(Tarjan+tree_dp)
			2427: [HAOI2010]软件安装 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1053 Solved: 424[Submit][Statu ... 
- [转]Linux定时任务Crontab详解
			转自:http://blog.chinaunix.net/uid-7552018-id-182133.html 今天做了个数据库的备份脚本,顺便系统得学习一下Linux下定时执行脚本的设置.Linux ... 
- SQL SERVER中存储过程IN 参数条件的使用!!!
			正常的传递 @SendStationID='''1'',''2''' 是无效,改用 @SendStationID='1,2,3,003,002' 调用以下的存储过程可以实现in 查询效果 USE [ ... 
- 软件图标显示不正常【win7企业版】
			现象: 原因: 图标缓存没有把该软件图标建立起来 解决: 一. 1.找到 IconCache.db 2.你要把电脑隐藏文件打开不然找不到这个文件的,组织—文件夹及搜索选项——查看——显示隐藏文件.文件 ... 
- C#模拟百度登录并到指定网站评论回帖(二)
			序言: 回归正题:前面讲到的抓包分析的数据,是模拟登录要获得得必要信息(当然有些也不是必要的...我只是都列举出来这样有个对比)如果说,有哪个英文字母不知道什么意思的,可以问一下度娘,有不少前辈都发过 ... 
- Spring Cloud (13) 服务网关-路由配置
			传统路由配置 所谓传统路由配置方式就是在不依赖于服务发现机制情况下,通过在配置文件中具体制定每个路由表达式与服务实例的映射关系来实现API网关对外部请求的路由.没有Eureka服务治理框架帮助的时候, ... 
