#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. SetACL 使用方法详细参数中文解析

    示例: SetACL.exe c:\nihao /dir /deny everyone /read_ex 设置E:\wxDesktop 文件夹 everyone 用户为读取和运行权限 SetACL M ...

  2. seam的定时轮巡

    青岛的项目要做一个功能,每天凌晨2点的时候保存一次设备数据,这个就要求项目能够间隔24小时每天去做这个事,是一个自主轮巡. seam框架正好提供了这个功能,@Expiration指定开始时间,@Int ...

  3. Ajax无刷新显示

    前台页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1. ...

  4. JS DOM节点(当前标签和同级、父级、子级..之间的关系)

    1. 通过顶层document节点获取    1) document.getElementById(elementId) //根据id获得    2) document.getElementsByNa ...

  5. vue中使用Swiper

    第一步:安装swiper在项目目录下打开命令窗口输入命令:npm install swiper 第二步:引入js文件 第三步:引入css文件在main.js文件中引入css文件

  6. Linux 开启443端口

     1 在Linux终端输入指令: iptables -I INPUT -p tcp --dport 443 -j ACCEPT   2 回车之后继续输入指令,输入保存防火墙配置指令: service ...

  7. Robberies (01背包dp变形)

    题意:一个强盗要抢劫银行又不想被抓到,所以要进行概率分析求他在不被抓的情况下能抢最多的钱.他给定T(样例个数),N(要抢的银行的个数),P(被抓的概率要小于P)Mj(强盗能抢第j个银行Mj元钱),Pj ...

  8. Cat VS Dog HDU_3829(最大独立集最大匹配)

    Cat VS Dog 题意:一群小朋友去动物园,如果每个小朋友喜欢的动物是猫,那么不喜欢的动物一定是狗,反之也是.现在动物园的管理者要拿走一些动物,如果拿走的是某个小朋友不喜欢的动物,那这个小朋友就非 ...

  9. git 的简单使用(5)

    git中打标签非常简单:只需要先奇幻岛想要打标签的分支 然后使用指令 git tag <name>就可以打一个新标签 可以用指令 git tag 查看所有标签 git tag <标签 ...

  10. 第五节:web爬虫之urllib(一)

    一.urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False,    ...