#include<iostream>
#include<cstdio>
#include<cstring> #define ll long long
#define N 100010 using namespace std;
ll ans,mod;
int n,m;
struct tree
{
int l,r;
int mul_,sum_;
long long sum;
}tr[N<<]; void pushup(int k)
{
tr[k].sum=(tr[k<<].sum+tr[k<<|].sum)%mod;
} void build(int k,int l,int r)
{
tr[k].l=l;tr[k].r=r;tr[k].sum_=;tr[k].mul_=;
if(l==r)
{
scanf("%lld",&tr[k].sum);
return;
}
int mid=(l+r)>>;
build(k<<,l,mid);build(k<<|,mid+,r);
pushup(k);
} void down_sum(int k)
{
tr[k<<].sum_=(tr[k].sum_+tr[k<<].sum)%mod;
tr[k<<|].sum_=(tr[k].sum_+tr[k<<|].sum)%mod;
tr[k<<].sum+=(tr[k<<].r-tr[k<<].l+)*tr[k<<].sum_;
tr[k<<].sum%=mod;
tr[k<<|].sum+=(tr[k<<|].r-tr[k<<|].l+)*tr[k<<|].sum_;
tr[k<<|].sum%=mod;
tr[k].sum_=;
} void down_mul(int k)
{
tr[k<<].mul_=(tr[k<<].mul_*tr[k].mul_)%mod;
tr[k<<|].mul_=(tr[k<<|].mul_*tr[k].mul_)%mod;
tr[k<<].sum_=(tr[k<<].sum_*tr[k].mul_)%mod;
tr[k<<].sum_=(tr[k<<|].sum_*tr[k].mul_)%mod; tr[k<<].sum_=(tr[k<<].sum*tr[k<<].mul_)%mod;
tr[k<<].sum+=(tr[k<<].r-tr[k<<].l+)*tr[k<<].sum_;
tr[k<<].sum%=mod; tr[k<<].sum_=(tr[k<<|].sum*tr[k<<|].mul_)%mod;
tr[k<<|].sum+=(tr[k<<|].r-tr[k<<|].l+)*tr[k<<|].sum_;
tr[k<<|].sum%=mod; tr[k].mul_=;
} void changesum(int k,int l,int r,int c)
{
if(l>r||r<l) return;
if(tr[k].l==l && tr[k].r==r)
{
tr[k].sum_+=c;
tr[k].sum+=(tr[k].r-tr[k].l+)*tr[k].sum_;
tr[k].sum%=mod;
return;
}
if(tr[k].mul_!=) down_mul(k);
if(tr[k].sum_) down_sum(k);
int mid=(tr[k].l+tr[k].r)>>;
if(r<=mid) changesum(k<<,l,r,c);
else if(l>mid) changesum(k<<|,l,r,c);
else changesum(k<<,l,mid,c),changesum(k<<|,mid+,r,c);
pushup(k);
} void changemul(int k,int l,int r,int c)
{
if(l>r||r<l) return;
if(tr[k].l==l && tr[k].r==r)
{
tr[k].mul_*=c;
tr[k].sum_*=c;
tr[k].sum*=c%mod;
//tr[k].sum+=(tr[k].r-tr[k].l+1)*tr[k].sum_;
tr[k].sum%=mod;
return;
}
if(tr[k].mul_!=) down_mul(k);
if(tr[k].sum_) down_sum(k);
int mid=(tr[k].l+tr[k].r)>>;
if(r<=mid) changemul(k<<,l,r,c);
else if(l>mid) changemul(k<<|,l,r,c);
else changemul(k<<,l,mid,c),changemul(k<<|,mid+,r,c);
pushup(k);
} int query(int k,int l,int r)
{
if(l>r||r<l) return ;
if(tr[k].l==l && tr[k].r==r)
return tr[k].sum%mod;//
if(tr[k].mul_!=) down_mul(k);
if(tr[k].sum_) down_sum(k);
int mid=(tr[k].r+tr[k].l)>>;
if(r<=mid) return query(k<<,l,r)%mod;
else if(l>mid) return query(k<<|,l,r)%mod;
else return query(k<<,l,mid)%mod+query(k<<|,mid+,r)%mod;
} int main()
{
scanf("%d%lld",&n,&mod);
build(,,n);
scanf("%d",&m);
int x,y,f,c;
for(int i=;i<=m;i++)
{
scanf("%d",&f);
if(f==)
{
scanf("%d%d%d",&x,&y,&c);
changemul(,x,y,c);
}
else if(f==)
{
scanf("%d%d%d",&x,&y,&c);
changesum(,x,y,c);
}
else
{
scanf("%d%d",&x,&y);
printf("%d\n",query(,x,y)%mod);
}
}
return ;
}

没调出来 P2023的更多相关文章

  1. 源码都没调试过,怎么能说熟悉 redis 呢?

    一:背景 1. 讲故事 记得在很久之前给初学的朋友们录制 redis 视频课程,当时结合了不少源码进行解读,自以为讲的还算可以,但还是有一个非常核心的点没被分享到,那就是源码级调试, 对,读源码还远远 ...

  2. 京东首页原生----js制作|css动画|js动画|计时器--轮播图(好久没更新,这两天闲的蛋疼做个京东页面分辨率1366*768,919京东,适应没调!)要文件加关注找我要哦!

  3. 总是有一个程序的bug没找到

     算法训练 Lift and Throw   时间限制:3.0s   内存限制:256.0MB      问题描述 给定一条标有整点(1, 2, 3, ...)的射线. 定义两个点之间的距离为其下标之 ...

  4. 【扯淡篇】CTSC/APIO/SDOI R2时在干什么?有没有空?可以来做分母吗?

    注意: 我比较弱, 并没有办法把外链bgm搞成https, 所以大家可以选择"加载不安全的脚本"或者把https改成http以获得更好的阅读体验! 据说, 退役了要写写回忆录. 但 ...

  5. Webpack从入门到上线

    webpack是目前一个很热门的前端打包工具,官网说得很清楚,webpack的出现就是要把requirejs干掉.同时它还提供了十分便利的本地开发的环境.网上并不容易找到一个讲解得比较详细完整的教程, ...

  6. 汤姆大叔 javascript 系列 第20课 最后的5到javascript题目

    博客链接:http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html 原题: 大叔注:这些题目也是来自出这5个题目的人,当然如果你能答对4 ...

  7. Daily Scrum Meeting ——ThirdDay(Beta)12.11

    一.Daily Scrum Meeting照片 二.Burndown Chart 三.项目进展(check-in) 1.欢迎界面的优化,从模糊到清楚 2.新增主界面背景 3.新增注册背景 4.参与者侧 ...

  8. myeclipse导入项目出现jquery错误(有红叉)

    今天导入了一个项目,但是进去之后jquery出现了红叉,如图(事实上在我没调好之前两个jquery文件都有叉号) 怎么调呢?右键jquery文件,选择MyEclipse->Exclude Fro ...

  9. iOS开发之使用CocoaPods更新第三方出现“target overrides the `OTHER_LDFLAGS`……”问题解决方案

    今天在自己的项目中用CocoaPods引入第三方SDWebImage的时候,出现了问题.当更新完毕后,在终端没太注意这个问题的提示,就直接使用SDWebImage了,在使用的时候一些方法的提示和头文件 ...

随机推荐

  1. Labview学习笔记(三)

    一.数据 1.数值控件 (1)数值控件 根据不同的模拟状态,放置不同控件 (2)显示格式 为了程序显示,需要设置数值型控件的表示法.数值范围.显示格式等属性. 一般来说,长度越长,则可以表示的数值范围 ...

  2. vue-cli3 中的环境变量

    官方文档是这样写的: src同名文件夹下的建立 .env.[model] 配置文件  // mode:production development ... 载入的变量会对vue-cli-service ...

  3. js 阻止冒泡事件和默认事件

    阻止事件冒泡 window.enent ? window.enent.cancelBubble = true : e.stopPropagation() function stopBubble(eve ...

  4. Sort HDU5884(二分+多叉哈夫曼树)

    HDU5884 Sort 题意:有n个序列要进行归并,每次归并的代价是两个序列的长度的和,要求最终的代价不能超过规定的T,求在此前提下一次能同时进行归并的序列的个数k. 思路:还是太单纯,看完题目一直 ...

  5. Vim 写 C/C++ 的配置

    .vimrc 2018/08/08 更新 基本的配置,缩进显示行号等 给每个 C/C++ 文件添加头部,显示作者,文件创建时间 F5 编译执行 C/C++源代码 Ctrl + F 利用用 astyle ...

  6. [备忘]git常用命令

    网站有点儿久没有维护(因为去做其他事情了呗),现在空下来,回来改了网站的一些东西,却忘记了git的一些常用的命令,于是便写下这篇文,方便查阅,免得每次都去看手册(毕竟我懒啊!!) 检查当前文件状态:g ...

  7. 【[Offer收割]编程练习赛 14 B】投掷硬币

    [题目链接]:http://hihocoder.com/problemset/problem/1506 [题意] 中文题 [题解] 这种题是概率DP-. 设f[i][j]表示i个硬币里面有j个正面朝上 ...

  8. SecureCRT的设置和美化

    一  . SecureCRT 7.1  的 安装     http://liufei888.blog.51cto.com/2625545/1306231 1.下载注册机SecureCRT.v.6.7. ...

  9. 这书真的不错--Spring MVC Beginner's Guide

    五百多页,我干到三百多页了. 每个知识点都有说明,操作,解释. 学SPRING MVC,有它就够了. 遗憾的是,这个PDF的文档格式太稀松啦,且,无中文版~~~ 我都想作汉化翻译工作了...算了,忍住 ...

  10. hibernate使用c3p0数据源

    在配置好hibernate连接数据库环境的前提下,我们进行例如以下操作就能够搭建好hibernate中使用c3p0数据源的环境了. 1). 导入 jar 包: hibernate-release-4. ...