[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智能网络视频监控系统>,记录和介绍了自己几年来积 ...
随机推荐
- P3567 [POI2014]KUR-Couriers 主席树
这个题比一般主席树还要简单,但是用来练习主席树再好不过了,在这里我再放一下主席树板子. 代码: #include<iostream> #include<cstdio> #inc ...
- bzoj1477 && exgcd学习笔记
exgcd 由于忘记了exgcd,这道题就没做出来... exgcd的用处是求ax+by=gcd(a,b)这样方程的解 大概是这个样子的 void ext_gcd(long long a, long ...
- CSS样式适配杂记
1.问:input框的对齐,制作类似百度搜索框的时候,发现IE下前面输入框和后面按钮总是不能对齐. 解答:给input框增加vertical-align:bottom; 2.问:IE下display: ...
- [App Store Connect帮助]一、 App Store Connect 使用入门(1)App Store Connect 工作流程
您使用 App Store Connect 提交并管理您在 App Store 中销售的 App,使用 TestFlight 分发您 App 的 Beta 版本,接受法律协议,输入您的税务和银行业务信 ...
- vue-video-player视频播放插件
安装依赖 npm install vue-video-player -S 引入配置 //main.js import 'video.js/dist/video-js.css' import 'vue- ...
- ASP.NET MVC5 之数据迁移
SQL 中新建数据库 DataSystem 1.web.config 数据库连接字符串: <add name="APPDataConnection" connectionSt ...
- Django总结一
HTTPRequest与HTTPresponse 一. 1.互联网两台机器之间通行:ip.端口.协议 - 协议 - HTTP (80) - HTTPS (443) 2.浏览器输入URL一回车返回页面发 ...
- ACM算法目录
数据结构 栈,队列,链表 •哈希表,哈希数组 •堆,优先队列 双端队列 可并堆 左偏堆 •二叉查找树 Treap 伸展树 •并查集 集合计数问题 二分图的识别 •平衡二叉树 •二叉排序树 •线段树 一 ...
- 【知识总结】卡特兰数 (Catalan Number) 公式的推导
卡特兰数的英文维基讲得非常全面,强烈建议阅读! Catalan number - Wikipedia (本文中图片也来源于这个页面) 由于本人太菜,这里只选取其中两个公式进行总结. (似乎就是这两个比 ...
- 为什么使用HttpServlet?http协议特点、servlet
因为只有HttpServlet是基于http协议,实现Servlet接口,而http协议是短连接协议,能够实现客户端访问服务端后,数据交互后 连接自动断开.同时http协议基于tcp.ip协议,封装了 ...