bzoj4869

http://www.lydsy.com/JudgeOnline/problem.php?id=4869

终于A了。。。参考了下dalao的代码。。。

拓展欧几里得定理,改了几次就不变了,但是用的时候要在快速幂里判是不是要用。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 100010;
int n, m, cnt;
ll p, c;
ll phi[N], table[N];
namespace seg // n^x = n^(x % phi[x] + phi[x])
{struct data {ll ans, mn;} tree[N << 2];inline ll getphi(ll x){ll ret = x, lim = x;for(ll i = 2; i * i <= lim; ++i) if(x % i == 0) {ret = ret * (i - 1) / i;while(x % i == 0) x /= i;}
//      printf("ret=%d\n", ret);if(x > 1) ret = ret * (x - 1) / x;return ret;}inline ll power(ll x, ll t, ll p, bool &flag){bool big = false;ll ret = 1; for(; t; t >>= 1) {if(t & 1) {ret = ret * x ;flag |= big | (ret >= p);        ret %= p;}x = x * x; if(x >= p) big = true, x %= p; }return ret; }ll calc(ll x, int t){if(x >= phi[t]) x = x % phi[t] + phi[t];for(int i = t - 1; i >= 0; --i) {bool flag = false;x = power(c, x, phi[i], flag);if(flag) x += phi[i];}return x % phi[0];}inline void build(int l, int r, int x){if(l == r) { tree[x].ans = table[l]; return; }int mid = (l + r) >> 1;build(l, mid, x << 1); build(mid + 1, r, x << 1 | 1);tree[x].ans = (tree[x << 1].ans + tree[x << 1 | 1].ans) % phi[0];} inline void update(int l, int r, int x, int a, int b){ //如果这次的幂和上次一样就不变了 if(tree[x].mn >= cnt) return;if(l > b || r < a) return;if(l == r){++tree[x].mn;tree[x].ans = calc(table[l], tree[x].mn);return;}int mid = (l + r) >> 1;update(l, mid, x << 1, a, b); update(mid + 1, r, x << 1 | 1, a, b);tree[x].mn = min(tree[x << 1].mn, tree[x << 1 | 1].mn);tree[x].ans = (tree[x << 1].ans + tree[x << 1 | 1].ans) % phi[0]; }inline ll query(int l, int r, int x, int a, int b){if(l > b || r < a) return 0;if(l >= a && r <= b) return tree[x].ans % phi[0];int mid = (l + r) >> 1, ret = 0;ret = (ret + query(l, mid, x << 1, a, b)) % phi[0];ret = (ret + query(mid + 1, r, x << 1 | 1, a, b)) % phi[0];return ret;    } 
} using namespace seg;
int main()
{scanf("%d%d%lld%lld", &n, &m, &p, &c);phi[0] = p;ll P = p;while(P != 1) phi[++cnt] = P = getphi(P);phi[++cnt] = 1; for(int i = 1; i <= n; ++i) scanf("%lld", &table[i]);build(1, n, 1); while(m--){int opt, l, r; scanf("%d", &opt);if(opt == 0){scanf("%d%d", &l, &r); update(1, n, 1, l, r);}if(opt == 1) {scanf("%d%d", &l, &r);printf("%lld\n", query(1, n, 1, l, r));}}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/19992147orz/p/6832433.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一张图一个表——CSS选择器总结

CSS选择器总结&#xff1a; (这些表是一张图片^_^) 看底部 完整思维导图图片和表格的下载地址&#xff1a;https://download.csdn.net/download/denlnyyr/10597820 &#xff08;我不想选择要积分币下载的&#xff0c;但那里最低必须选择1个积分……&#xff09; 参考文献&…

JavaOne 2012覆盖率

年度Java盛会JavaOne会议于9月30日至10月4日在旧金山举行。 进行了许多有趣的演示&#xff0c;再次证明了健康的Java生态系统。 Java Code Geeks未能参加会议&#xff0c;但是我们的JCG合作伙伴Dustin Marx出席了会议&#xff0c;并且慷慨地提供了有关该事件的完整报道&#x…

native层 安卓_安卓逆向——拼xx协议java层分析

制丨阿星整理丨阿星老铁们大家好&#xff0c;今天小编给大家带来很实用的技巧叫拼xx协议java层分析&#xff0c;有啥不足的地方望大家指点指点&#xff01;首先抓包 反编译这个时间段我们方法剖析一下找到onclick 看他的走向找到方法的地方都是在进行写入 所以我们直接分析结果…

对口高考计算机vf试题,计算机对口升学模拟答案.doc

2013年计算机专业对口高考模拟试题二一、选择题1&#xff0e;计算机硬件系统由( )组成A.CPU和内存 B.控制器和运算器 C.主机和外设 D.CPU、内存和外存2.下列叙述中&#xff0c;正确的说法是( )。A.键盘、鼠标、光笔、数字化仪和扫描仪都是输入设备B.打印机、显示器、数字化仪都…

Java集合框架图

转载于:https://www.cnblogs.com/areyouready/p/6835279.html

JavaScript学习第一天(一)

JavaScript介绍 JavaScript一种直译式脚本语言&#xff0c;是一种动态类型、弱类型、基于原型的语言&#xff0c;内置支持类型。它的解释器被称为JavaScript引擎&#xff0c;为浏览器的一部分&#xff0c;广泛用于客户端的脚本语言&#xff0c;最早是在HTML&#xff08;标准通用…

折半查找的思想及源码_常用排序与查找算法

1 选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是&#xff1a;第一次从待排序的数据元素中选出最小(或最大)的一个元素&#xff0c;存放在序列的起始位置&#xff0c;然后再从剩余的未排序元素中寻找到最小(大)元素&#xff0c;然后放到已排序的序…

滚动视差?CSS 不在话下

何为滚动视差 视差滚动&#xff08;Parallax Scrolling&#xff09;是指让多层背景以不同的速度移动&#xff0c;形成立体的运动效果&#xff0c;带来非常出色的视觉体验。 作为网页设计的热点趋势&#xff0c;越来越多的网站应用了这项技术。 通常而言&#xff0c;滚动视差在…

计算机图形学试题a卷,计算机图形学复习题及答案

一、选择题1.计算机绘图设备一般使用( )颜色模型。A. RGBB. CMYC. HSVD. HLS2.在透视投影中&#xff0c;主灭点的最多个数是( )A1B2C3D43.多边形填充时&#xff0c;下述论述错误的是( )A 多边形被两条扫描线分割成许多梯形&#xff0c;梯形的底边在扫描线上&#xff0c;腰在多边…

番石榴的弦类

在“ 检查Java中的空&#xff0c;空或仅空白字符串”一文中 &#xff0c;我演示了Java生态系统&#xff08;标准Java&#xff0c; Guava &#xff0c; Apache Commons Lang和Groovy &#xff09;中用于检查字符串是否为空&#xff0c;空或空白的常见方法。仅类似于C&#xff03…

用python做数据分析流程图_使用Pyecharts进行高级数据可视化

欢迎使用Markdown编辑器经管之家&#xff1a;Do the best economic and management education&#xff01;你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语…

Hadoop集群的配置(二)

转自&#xff1a;http://www.cnblogs.com/baiboy/p/4640640.html 摘要: hadoop集群配置系列文档&#xff0c;是笔者在实验室真机环境实验后整理而得。以便随后工作所需&#xff0c;做以知识整理&#xff0c;另则与博客园朋友分享实验成果&#xff0c;因为笔者在学习初期&#x…

允许使用抽象类类型 isearchboxinfo 的对象_Java学习5-设计模式+抽象类/方法

1.设计模式设计模式&#xff1a;一套被反复使用、多数人知晓的&#xff0c;经过分类编目的、代码设计经验的总结&#xff0c;是软件开发人员在软件开发过程中面临的一般问题的解决方案。项目中合理的运用设计模式可以完美的解决很多问题&#xff1b; 每种模式在现实中都有相应的…

初始Windows程序

1.属性 窗体标题 Name 窗体的图标 Icon 背景图片 BackgroundImage 背景颜色 BackColor 最大化按钮 MaxIMonBox 最小化按钮 Minimun 窗体边框样式 FormBorderStyle 窗体初始位置 StartPosition 窗体状态 WindowsState 背景图片拉伸 BackgroundImageLayout 窗体标题 Te…

计算机病毒是以独立的文件形式存在的对吗,计算机病毒以什么形式存在?

自从2113世纪出现第一种病毒以来&#xff0c;对于世界上共有5261种病毒的疾病数量有不同的看法. 无论有1,653种&#xff0c;病毒的数量仍在增加. 根据国外统计&#xff0c;计算机病毒以每周10种的速度增长. 根据我国部的统计&#xff0c;中国计算机病毒以每月4种的速度增长. 有…

HTML基础实例

本节列举了一些简单的HTML例子&#xff0c;帮助大家更感性地认识HTML标签。是不是对一些标签还不熟悉&#xff1f;别担心&#xff0c;后面几个章节会有详细说明&#xff0c;先跑几个例子看看效果吧。 HTML文档相关标签所有HTML文档必须以<!DOCTYPE html>声明开头。 HTM…

签署Java代码

在上一篇文章中&#xff0c;我们讨论了如何保护移动代码 。 提到的措施之一是签名代码。 这篇文章探讨了Java程序如何工作。 数字签名 数字签名的基础是密码学 &#xff0c;特别是公钥密码学 。 我们使用一组加密密钥&#xff1a;私有密钥和公共密钥。 私钥用于签名文件&am…

蜘蛛搜索引擎_SEO:搜索引擎蜘蛛要引导,不能佛系优化

又是一个不眠的夜晚&#xff0c;工作对生活节奏不断地敲打&#xff0c;我们新一代的年轻小伙不得不进步&#xff0c;满怀热情来挑战我们对于工作的激情&#xff0c;虽然每一天工作都是重复地进行&#xff0c;但是每一天都有我们留下的痕迹&#xff0c;为世界的美好增添一道绚丽…

SQL数据库排序规则修改

修改SQL数据库排序规则: 1.修改为单用户模式 2.然后关闭所有的查询窗口&#xff0c;修改Options的Collocation属性&#xff0c;如&#xff1a;Chinese_PRC_90_CI_AS 3.再修改为多用户模式 例如&#xff1a; ALTER DATABASE SRMain SET SINGLE_USER WITH ROLLBACK IMMEDIATE Go…

属于计算机病毒主要特征的是,[单选] 不属于计算机病毒的主要特征的是()

[单选] 不属于计算机病毒的主要特征的是()更多相关问题已知两直线l1&#xff1a;mx&#xff0b;y&#xff0d;20和l2&#xff1a;(m&#xff0b;2)x&#xff0b;y&#xff0b;40与两坐标轴围成的四边形有外接圆&#xff0c;则实数m的值为()A&#xff0e;1B&#xff0e;&#xf…