题目背景

大芳有一个不太好的习惯:在车里养青蛙。青蛙在一个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次幂和是几何?记得答案要

模10000000071000000007

输入输出格式

输入格式:

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

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

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

输出格式:

每次进行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

说明

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

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

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

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

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

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

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

===========

解:线段树;

维护p[i]即为i次方;

难在ch_add函数,用二项式定理:

好好看ch_add函数;

#include<cstdio>
#include<cstring>
#define ll long long
const ll N=100010;
const ll mod=1e9+7;
struct node
{ll l,r;ll la_add,la_set,p[12];
}e[N<<3];
ll c[12][12];
#define ls ro<<1
#define rs ro<<1|1
inline void pushup(ll ro)
{for(ll i=0;i<=10;i++)e[ro].p[i]=(e[ls].p[i]+e[rs].p[i])%mod;
}
void build(ll ro,ll l,ll r)
{e[ro].l=l,e[ro].r=r;e[ro].la_set=-1,e[ro].la_add=0;if(l==r){ll x;scanf("%lld",&x);e[ro].p[0]=1;for(ll i=1;i<=10;i++)e[ro].p[i]=e[ro].p[i-1]*x%mod;return;}ll mid=(l+r)>>1;build(ls,l,mid);build(rs,mid+1,r);pushup(ro);
}
inline void ch_add(ll ro,ll x)
{for(int i=10;i>=0;i--){ll res=1,t=0;for(int j=i;j>=0;j--){t=(t+e[ro].p[j]*c[i][j]%mod*res)%mod;res=res*x%mod;    }e[ro].p[i]=t;}e[ro].la_add=(e[ro].la_add+x)%mod;
}
inline void ch_set(ll ro,ll x)
{ll res=1;for(ll i=0;i<=10;i++){e[ro].p[i]=res*(e[ro].r-e[ro].l+1)%mod;res=res*x%mod;}e[ro].la_add=0;e[ro].la_set=x;
}
inline void down(ll ro)
{if(e[ro].la_set!=-1){ch_set(ls,e[ro].la_set);ch_set(rs,e[ro].la_set);e[ro].la_set=-1;}if(e[ro].la_add){ch_add(ls,e[ro].la_add);ch_add(rs,e[ro].la_add);e[ro].la_add=0;}
}
void add(ll ro,ll l,ll r,ll x)
{down(ro);if(l<=e[ro].l&&e[ro].r<=r){ch_add(ro,x);return;}ll mid=(e[ro].l+e[ro].r)>>1;if(l<=mid) add(ls,l,r,x);if(r>mid)  add(rs,l,r,x);pushup(ro);
}
void set(ll ro,ll l,ll r,ll x)
{down(ro);if(l<=e[ro].l&&e[ro].r<=r){ch_set(ro,x);return;}ll mid=(e[ro].l+e[ro].r)>>1;if(l<=mid) set(ls,l,r,x);if(r>mid)  set(rs,l,r,x);pushup(ro);
}
ll query(ll ro,ll l,ll r,ll x)
{down(ro);if(l<=e[ro].l&&e[ro].r<=r) return e[ro].p[x];ll mid=(e[ro].l+e[ro].r)>>1;ll ans=0;if(l<=mid) ans=(ans+query(ls,l,r,x))%mod;if(mid<r) ans=(ans+query(rs,l,r,x))%mod;return ans;
}
int main()
{ll n,m;scanf("%lld %lld",&n,&m);build(1,1,n);
//    for(ll i=1;i<=20;i++)
//    {
//        printf("std:: %lld %lld %lld %lld ",e[i].l,e[i].r,e[i].la_add,e[i].la_set);
//        for(ll j=0;j<=10;j++) printf("%lld ",e[i].p[j]);
//        printf("\n");
//    }c[0][0]=1;for(ll i=1;i<=10;i++){c[i][0]=1;for(ll j=1;j<=i;j++)c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;}
//    for(int i=0;i<=10;i++)
//    {
//        for(int j=0;j<=i;j++)
//            printf("%lld ",c[i][j]);
//        printf("\n");
//    }
        ll dp,l,r,x;for(ll i=1;i<=m;i++){scanf("%lld %lld %lld %lld",&dp,&l,&r,&x);if(dp==1) add(1,l,r,x);else if(dp==2) set(1,l,r,x);else printf("%lld\n",query(1,l,r,x));}    return 0;
}

lougu T7983

============

转载于:https://www.cnblogs.com/12fs/p/7701448.html

lougu T7983 大芳的逆行板载相关推荐

  1. T7983 大芳的逆行板载

    转载于:https://www.cnblogs.com/tflsnoi/articles/7261395.html

  2. 大数据的逆袭:传统数据库市场的变革

    文章讲的是大数据的逆袭:传统数据库市场的变革,大数据是什么?Gartner认为,大数据是超出了常用硬件环境和软件工具在可接受的时间内为其用户收集.管理和处理数据的能力.麦肯锡认为,大数据是指大小超出了 ...

  3. (转)利用WPF的ListView进行大数据量异步加载

    原文:http://www.cnblogs.com/scy251147/archive/2012/01/08/2305319.html 由于之前利用Winform的ListView进行大数据量加载的时 ...

  4. mysql 懒加载数据_jpa如何懒加载大字段,懒加载之后又如何获取懒加载字段

    前言:对于大字段,我们在查询列表的时候不需要查询,但是修改的时候有需要展示大字段内容,怎么办 问1.jpa如何懒加载大字段?即查询列表的时候不查询出来 问2.懒加载之后又如何获取懒加载字段.比如,在后 ...

  5. Unity大密度建筑场景加载解决方案

    现在虚拟城市仿真,以及军事仿真项目越来越多,开发此类项目,首先面对的一个比较棘手的问题是内存管理,城市中的建筑物特别多,这些建筑物的面数和贴图都要被加到内存中的,内存有自己的峰值,超过了就要崩掉,所以 ...

  6. 图片太大,导致页面加载过慢的处理方法

    整合博客:https://blog.csdn.net/wsyzxss/article/details/73480436  与 http://yujiangshui.com/three-html5-fe ...

  7. 自定义字体包过大,导致页面加载缓慢的问题解决

    // 字体包过大,在渲染页面客户端时加载缓慢,导致页面加载缓慢影响用户体验.需要处理字体包: // 1. 转码,使得不受不同浏览器之间的限制 2.压缩:使得加载更迅速 // 使用中文字体压缩器:fon ...

  8. 【vue-treeselect】数据量大的时候懒加载并且可以搜索,树懒加载+搜索

    这两天快被这个懒加载加搜索搞崩溃了 今天小有收获,后面优化了再更新 主要说一下一棵树如何懒加载和搜索 1.ref不解释了,和本次代码无关 2.normalizer格式化内容不重要 3.load-opt ...

  9. 开发那些事儿:如何解决js打包文件体积过大导致的网页加载慢问题?

    智能分析网关作为我们新推出的产品,除了丰富的AI智能检测及视频功能之外,我们依然在持续拓展新AI算法的部署,并不断优化细节.提升用户的使用体验. 近期,我们对js打包文件体积过大的情况进行了优化,解决 ...

最新文章

  1. flask使用SQLAlchemy操作mysql
  2. java 日期检查_如何在Java中检查日期
  3. HTML基础复习(三)表格
  4. JSTL标签显示分页
  5. suse linux下交叉编译,阐述SUSE 10.1交叉编译环境构建方法
  6. 大学慕课数据结构单元测试——华中科技大学
  7. endnote怎么和word关联_endnote x9怎么和word关联?Word中用EndNote X9教程
  8. 海南大学植物代谢组学技术开发与创新应用课题组博士后招聘
  9. 股东痛斥联想管理层:都是帅哥 但业绩差
  10. Python+pandas一维数组常用操作
  11. 【转】四阶魔方还原1
  12. table里面用三目_三个方法快速找到SAP后台Table
  13. Oracle的卸载过程步骤
  14. AD画板,如何提高工作效率?
  15. android旧版本运行器下载,有没有办法让新版安卓系统运行以前老安卓版本的软件?...
  16. 快速制作index.html,介绍一个h5快速制作平台鲁班H5
  17. 硬件中控一键开关机设计方案
  18. Entry name ‘res/layout/test_toolbar.xml‘ collided
  19. stata输出四分位、中位数的命令是什么?
  20. php的本地地址,php获取本机ip或远道地址

热门文章

  1. 创新型中小企业评价标准
  2. 设置VSS2005使支持通过Internet访问
  3. Python实验报告一 python基础试题练习
  4. GD32E232Kx 引脚功能表
  5. 帮助贴吧一个小老弟做题:
  6. Bison 的构成与使用
  7. 编辑/调试汇编语言所需要工具
  8. 基金训练营学习笔记3-股票基金
  9. 动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包,混合背包
  10. AjaxPro Ajax.Net