#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. NBXplorer的配置

    首先,必须安装bitcoin core bitcoin core启动时,会提示你定义数据存放目录,在数据存放目录下,找到bitcoin.conf文件,并填写内容: server=1rpcuser=rp ...

  2. java 导入导出的 命令

    $exp lddba/ld_321@192.168.1.3/testora file=E:\db_bak\ld20170219_1testora.dmp log=E:\db_bak\ld2017021 ...

  3. 【原创】基于NodeJS Express框架开发的一个VIP视频网站项目及源码分享

    项目名称:视频网站项目 开发语言:HTML,CSS(前端),JavaScript,NODEJS(expres)(后台) 数据库:MySQL 开发环境:Win7,Webstorm 上线部署环境:Linu ...

  4. C++入职学习篇--代码规范(持续更新)

    C++入职学习篇--代码规范(持续更新) 一.头文件规范 在头文件中大家一般会定义宏.引入库函数.声明.定义全局变量等,在设计时最后进行分类,代码示范(自己瞎琢磨的,请多多指点): #ifndef T ...

  5. Delphi / Pascal 语法知识干货

    ********************************************* Pascal.Delph干货 *************************************** ...

  6. 使用scrapy爬取的数据保存到CSV文件中,不使用命令

    pipelines.py文件中 import codecs import csv # 保存到CSV文件中 class CsvPipeline(object): def __init__(self): ...

  7. axios的基本概念和安装以及配置方法

    ajax:异步请求,是一种无需再重新加载整个网页的情况下,能够更新部分网页的技术 axios:用于浏览器和node.js的基于promise的HTTP客户端 1.从浏览器制作XMLHttpReques ...

  8. 【BestCoder Round #93 1001】MG loves gold

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=6019 [题意] 每次选择一段连续的段,使得这一段里面没有重复的元素; 问你最少选多少次; [题解] ...

  9. svn重新定位或checkout,提示输入用户名密码,输入后报错

    在MyEclipse中,source——>clean up.然后重新定位或checkout

  10. 可编辑ztree节点的增删改功能图标控制---已解决

    每文一语:休倚时来势,提防运去时 <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - beforeEd ...