T7983 大芳的逆行板载

题目背景

大芳有一个不太好的习惯:在车里养青蛙。青蛙在一个n厘米(11n毫米s)的Van♂杆子上跳来跳去。她时常盯着青蛙看,以至于突然逆行不得不开始躲交叉弹。有一天他突发奇想,在杆子上每1厘米为一个单位,瞎涂上了墨水,并且使用mOgic,使青蛙跳过之处墨水浓度增加x。当然,他还会闲着无聊滴几滴墨水再涂♂抹均匀。

他现在无时无刻都想知道,第l厘米到第r厘米墨水的浓度是多少?

哦不!等等,他现在找到了一个计算器,可以输入几个数字与x,计算他们的x次幂和,所以。。。他想知道的是第l厘米到第r厘米墨水的浓度的x次幂和是多少?

题目描述

大芳有3种舰长技能骚操作

  1. 续:把青蛙放到第l厘米处,戳青蛙使其跳至r。效果:第l厘米至第r厘米墨水浓度增加x

  2. 抚♂摸:擦干杆子某一部分,重新滴加墨水并抹匀。效果:使第l厘米至第r厘米墨水浓度都变成x

最后一种是:

  1. 压线逆行,将车流看做⑨弹幕找安定点,掏出计算器,大喊板载后计算:

第l厘米至第r厘米墨水浓度的x次幂和是几何?记得答案要

模100000000710000000071000000007

输入输出格式

输入格式:

第一行nnn和mmm,表示杆子长n厘米,大芳要进行m次骚操作。

第二行nnn个数字,表示初始墨水浓度。第i个数字为第i厘米墨水浓度

接下来每行4个数字,依次为:操作编号(1、2或3),lll,rrr,xxx

输出格式:

每次进行3操作,输出一行表示答案

记得模1000000007

输入输出样例

输入样例#1:

5 5
19844 14611 26475 4488 6967
2 1 3 15627
2 1 2 30113
2 3 5 14686
2 5 5 32623
3 1 2 8
输出样例#1:

466266421

说明

kkk表示询问的幂的大小,也就是操作3对应的xxx。

对于20%的数据,满足n,m≤1000n,m\leq 1000n,m≤1000

对于另外20%的数据,满足k≤1k\leq 1k≤1

对于另外20%的数据,满足k≤2k\leq 2k≤2

对于另外20%的数据,满足n,m≤50000n,m\leq 50000n,m≤50000

对于100%的数据,满足n,m≤100000,0≤k≤10n,m\leq 100000,0\leq k \leq 10n,m≤100000,0≤k≤10

操作1,2对应的x≤109+7x\le 10^9+7x≤10​9​​+7

比赛挂了.......闲着没事放下T2 来艹这个 T3

因为想到了 二项式定理 (x+c)^n=sigma i=0..n (c^i)*C(n,i)*(x^(n-i)) 

然后就觉得可能可以写了...

果然代码能力不足写挂了 赛后调了一个多小时发现时标记之间的关系弄错了............惨啊

——————————————————————————————————————————

这道题呢 涉及到区间加 区间覆盖 区间幂求和

区间覆盖其实很好弄

主要在于区间加 但是他求的幂只有(1——10) 所以我们可以暴力维护一波(1——10)的幂 -用二项式定理

这个不懂的百度学学咯 复杂度也就只有 100logn 能接受

当然推的时候注意先推幂的次数比较大的 其他都是正常的线段树操作了

当然别忘了覆盖标记遇到加法标记要把加法标记清零啊

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define LL long long
using namespace std;
const int M=<<,mod=;
LL read(){
LL ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
LL C[][],c[],q[],num[M],w;
int h,n,m,L,R;
struct node{
LL f,tag;
LL m[];
}tr[M];
void calc_f(int x,int l,int r,LL v){
LL sz=r-l+;
tr[x].m[]=sz*v%mod;
for(int i=;i<=;i++) tr[x].m[i]=(tr[x].m[i-]*v)%mod;
}
void push(int x,int k,LL v){
LL sum=;
for(int i=;i<=k;i++) sum=sum*v%mod,tr[x].m[k]=(tr[x].m[k]+sum*C[k][i]%mod*tr[x].m[k-i]%mod)%mod;
}
void calc_tag(int x,LL v){
for(int i=;i>=;i--)
push(x,i,v);
}
void up(int x){
int l=x<<,r=x<<^;
for(int i=;i<=;i++) tr[x].m[i]=(tr[l].m[i]+tr[r].m[i])%mod;
}
void down(int x,int l,int r){
int ll=x<<,rr=x<<^;
LL mid=(l+r)>>;
if(tr[x].f!=-){
tr[ll].f=tr[x].f; tr[rr].f=tr[x].f;
calc_f(ll,l,mid,tr[x].f);
calc_f(rr,mid+,r,tr[x].f);
tr[x].f=-; tr[ll].tag=tr[rr].tag=;
}
if(tr[x].tag){
if(l==r) return ;
calc_tag(ll,tr[x].tag);
calc_tag(rr,tr[x].tag);
tr[x<<].tag+=tr[x].tag; tr[x<<^].tag+=tr[x].tag; tr[x].tag=;
}
}
void modify_tag(int x,int l,int r){
if(L<=l&&r<=R){
tr[x].tag+=w;
if(l==r){
tr[x].m[]+=w;
for(int i=;i<=;i++) tr[x].m[i]=tr[x].m[i-]*tr[x].m[]%mod;
}
else calc_tag(x,w);
return ;
}
down(x,l,r);
int mid=(l+r)>>;
if(L<=mid) modify_tag(x<<,l,mid);
if(R>mid) modify_tag(x<<^,mid+,r);
up(x);
}
void modify_f(int x,int l,int r){
if(L<=l&&r<=R){
tr[x].f=w;
tr[x].tag=;
calc_f(x,l,r,w);
return ;
}
down(x,l,r);
int mid=(l+r)>>;
if(L<=mid) modify_f(x<<,l,mid);
if(R>mid) modify_f(x<<^,mid+,r);
up(x);
}
LL query(int x,int l,int r,int k){
if(L<=l&&r<=R) return tr[x].m[k];
down(x,l,r);
LL mid=(l+r)>>;
LL sum=;
if(L<=mid) sum=sum+query(x<<,l,mid,k);
if(R>mid) sum=sum+query(x<<^,mid+,r,k);
return sum%mod;
}
void build(int x,int l,int r){
tr[x].f=-;
if(l==r){
tr[x].m[]=;
tr[x].m[]=num[l];
for(int i=;i<=;i++) tr[x].m[i]=(tr[x].m[i-]*tr[x].m[])%mod;
return ;
}
int mid=(l+r)>>;
build(x<<,l,mid);
build(x<<^,mid+,r);
up(x);
}
void prepare(){
q[]=; q[]=;
for(int i=;i<=;i++) q[i]=q[i-]*i;
for(int i=;i<=;i++)
for(int j=;j<=i;j++)
C[i][j]=q[i]/(q[j]*q[i-j]);
}
int main()
{
prepare();
n=read(); m=read();
for(int i=;i<=n;i++) num[i]=read();
build(,,n);
for(int i=;i<=m;i++){
h=read();
if(h==){
L=read(); R=read(); w=read();
modify_tag(,,n);
}
else if(h==){
L=read(); R=read(); w=read();
modify_f(,,n);
}
else{
L=read(); R=read();
int k=read();
printf("%lld\n",query(,,n,k));
}//printf("[%lld]\n",tr[1].m[1]);
}
return ;
}

洛谷noip 模拟赛 day1 T3的更多相关文章

  1. 洛谷noip 模拟赛 day1 T1

    T7925 剪纸 题目描述 小芳有一张nnn*mmm的长方形纸片.每次小芳将会从这个纸片里面剪去一个最大的正方形纸片,直到全部剪完(剩下一个正方形)为止. 小芳总共能得到多少片正方形纸片? 输入输出格 ...

  2. 【洛谷mNOIP模拟赛Day1】T1 斐波那契

    题目传送门:https://www.luogu.org/problemnew/show/P3938 这题出得特别吼啊~~ 通过打表或者大胆猜想斐波那契数列的一些性质,我们不难发现对于一只兔子$x$,其 ...

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

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

  4. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  5. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  6. CH Round #48 - Streaming #3 (NOIP模拟赛Day1)

    A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...

  7. 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题, ...

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

    最近参加了很多CH上的比赛呢~Rating--了..题目各种跪烂.各种膜拜大神OTZZZ T1珠 描述 萌蛋有n颗珠子,每一颗珠子都写有一个数字.萌蛋把它们用线串成了环.我们称一个数字串是有趣的,当且 ...

  9. 洛谷mNOIP模拟赛Day1-斐波那契

    题目背景 大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家 ...

随机推荐

  1. 20145202马超 《Java程序设计》第七周学习总结

    Arrays:用于操作数组的工具类. 里面都是静态方法. asList:将数组变成list集合. 把数组变成集合的好处:可以使用集合的思想来操作数组中的元素. 将数组变成集合的时候不可以使用集合的增删 ...

  2. P2370 yyy2015c01的U盘

    P2370 yyy2015c01的U盘 题目背景 在2020年的某一天,我们的yyy2015c01买了个高端U盘. 题目描述 你找yyy2015c01借到了这个高端的U盘,拷贝一些重要资料,但是你发现 ...

  3. 无法访问hadoop yarn8088端口的解决方法

    1.检查是否正确的启动了resourcemanager服务 若是没有启动,请检查yarn-site-xml配置 2.若是启动了 1.检查客户机和虚拟机之间是否能够相互ping通 2.检查虚拟机防火墙是 ...

  4. Git从入门到熟练

    Git的特性 1. 分布式版本控制 集中式VS分布式 保存更新时的文件快照而非差异 (快照 :是文件系统中的概念或者技术:来自照相领域的概念,是指特定时间点的一个状态) 其他系统在每个版本中记录着各个 ...

  5. react事件处理及动态样式添加

    多数据的事件绑定,循环数据来进行绑定.如下方式就是循环绑定事件的基本代码: this.state.lists.map(function(value,index,array){//代码片段}.bind( ...

  6. 剑指Offer - 九度1520 - 树的子结构

    剑指Offer - 九度1520 - 树的子结构2013-11-30 22:17 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每 ...

  7. 《Cracking the Coding Interview》——第18章:难题——题目6

    2014-04-29 02:27 题目:找出10亿个数中最小的100万个数,假设内存可以装得下. 解法1:内存可以装得下?可以用快速选择算法得到无序的结果.时间复杂度总体是O(n)级别,但是常系数不小 ...

  8. Linux之Permission denied没有权限

    在Linux上启动solr时,出现-bash: ./solr: Permission denied的问题. 最简单的解决方式: chmod 777 solr 傻瓜式直接赋予权限

  9. operator、explicit与implicit

    说这个之前先说下什么叫隐式转换和显示转换 1.所谓隐式转换,就是系统默认的转换,其本质是小存储容量数据类型自动转换为大存储容量数据类型. 例如:float f = 1.0: double d=f:这样 ...

  10. pychram 的一些小技巧

    1.如何添加头部注释代码 进入设置 File->Settings->Editor->File and Code Templeates -> Python Script 添加以下 ...