题目背景

大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg

注意:本题大样例4的输出文件修改为 https://pan.baidu.com/s/1bUWuZW

奈芙莲·卢可·印萨尼亚(Nephren-Ruq-Insania)

同为妖精仓库的成体妖精兵,天赋不如珂朵莉一般,只是一个平凡的妖精.

睡觉时如同毯子一般在威廉身上为其保暖。习惯于粘着威廉,在梦境中与艾尔梅莉亚交谈时,自称就像是威廉的宠物一样。

本题题面中含有大量的剧透,建议做题之前将这部番剧看完(

题目描述

她只是一个非常普通的黄金妖精。

在援救打捞队的作战中,他们不幸与(几乎是所有的)第六兽相遇了。

此时的珂朵莉因为接触到星神艾露可本体,正处于昏迷之中。而威廉也无法离开珂朵莉。

默默守护在房间外的她,提起圣剑,走向了战场。

作为本身天赋只是一般的妖精少女,她难以对抗无数倍于自己的六号兽。

没有多久,她开始体力不支。

终于,在源源不断的六号兽面前,她难以抵挡了……

终于,由于魔力过度激发,她已经处在了魔力失控的边缘……

”威廉,拯救,是我们黄金妖精的使命。“

”况且,威廉之前已经救过我们了。“

”所以,已经没有问题了。“

威廉想要救下奈芙莲,但是他自己也已经处于崩溃的边缘。

冥冥之中他想起了曾经学习过的一种魔法。在这最后一刻,或许已经是唯一的办法了。

这种魔法操作的对象是一个咒语组成的序列,每一个单独的咒语拥有自己的法力值。

威廉需要不断地按照之前的记忆,对某一段区间的法力值加上一个数,或者求出某一段区间的法咒共鸣。

分析:这道题部分分还是比较多的.第一个数据点看起来数据非常小,但是3^3^3^3^3mod p会算不出来,因为次数很大,不能直接对次数取模.怎么将次数变小呢?欧拉定理! ,可以发现如果这道题就是不断地使用欧拉定理,直到φ(p)变成1或者计算完整个区间,这实际上就是一个递归的过程.用线段树进行区间修改,单点查询。

有几个地方需要注意:

1.如果区间[l,r]中第x位是1,那么[x,r]都不需要考虑了,因为1^n = 1.

2.欧拉定理成立的条件是x >= φ(p),而由于忽略0和1的情况,2^2^2^2^2就足以满足数据范围了,所以暴力枚举5位乘起来看看是不是>=φ(p)就可以了.如果<φ(p)就可以直接算,而不需要欧拉定理了.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int maxn = 500010;int n, m, prime[20000010], phi[20000010], cnt, flag[maxn];
long long tag[maxn << 2], c[maxn << 2], a[maxn], L[maxn << 2], R[maxn << 2];
bool vis[20000010];void init()
{phi[1] = 1;for (int i = 2; i <= 20000000; i++){if (!vis[i]){prime[++cnt] = i;phi[i] = i - 1;}for (int j = 1; j <= cnt; j++){int t = i * prime[j];if (t > 20000000)break;vis[t] = 1;if (i % prime[j] == 0){phi[t] = phi[i] * prime[j];break;}phi[t] = phi[i] * (prime[j] - 1);}}
}void pushup(int o)
{c[o] = c[o * 2] + c[o * 2 + 1];
}void pushdown(int o)
{if (tag[o]){tag[o * 2] += tag[o];tag[o * 2 + 1] += tag[o];c[o * 2] += (R[o * 2] - L[o * 2] + 1) * tag[o];c[o * 2 + 1] += (R[o * 2 + 1] - L[o * 2 + 1] + 1) * tag[o];}tag[o] = 0;
}void build(int o, int l, int r)
{L[o] = l;R[o] = r;if (l == r){c[o] = a[l];return;}int mid = (l + r) >> 1;build(o * 2, l, mid);build(o * 2 + 1, mid + 1, r);pushup(o);
}void update(int o, int l, int r, int x, int y, int v)
{if (x <= l && r <= y){tag[o] += v;c[o] += v;return;}pushdown(o);int mid = (l + r) >> 1;if (x <= mid)update(o * 2, l, mid, x, y, v);if (y > mid)update(o * 2 + 1, mid + 1, r, x, y, v);pushup(o);
}long long query(int o, int l, int r, int pos)
{if (l == r)return c[o];pushdown(o);int mid = (l + r) >> 1;if (pos <= mid)return query(o * 2, l, mid, pos);elsereturn query(o * 2 + 1, mid + 1, r, pos);
}long long Cal(int q)
{if (flag[q] == m)return a[q];flag[q] = m;return a[q] = query(1, 1, n, q);
}long long qpow(long long a, long long b, long long mod)
{a %= mod;long long res = 1;while (b){if (b & 1)res = (res * a) % mod;a = (a * a) % mod;b >>= 1;}return res;
}long long jisuan(int l, int r, int mod)
{if (mod == 1)return 1;if (l == r){long long t = Cal(l);if (t < mod)  //直接算return t % mod;elsereturn (t % mod) + mod;}int minn = min(n, l + 5);for (int i = l + 1; i <= minn; i++)if (Cal(i) == 1){minn = i;break;}long long p = Cal(minn), tot = 0;for (int i = minn - 1; i >= l + 1; i--){tot = p;p = 1;while (tot--){p *= Cal(i);if (p >= phi[mod])return qpow(Cal(l) % mod, jisuan(l + 1, r, phi[mod]) + phi[mod], mod);}}return qpow(Cal(l) % mod, jisuan(l + 1, r, phi[mod]), mod);
}int main()
{memset(flag, -1, sizeof(flag));init();scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++)scanf("%lld", &a[i]);build(1, 1, n);while (m--){int op, l, r, mod;scanf("%d%d%d%d", &op, &l, &r, &mod);if (op == 1)update(1, 1, n, l, r, mod);elseprintf("%lld\n", jisuan(l, r, mod) % mod);}return 0;
}

转载于:https://www.cnblogs.com/zbtrs/p/7707350.html

noip模拟赛 Nephren Ruq Insania相关推荐

  1. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  2. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...

  3. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  4. jyzy noip模拟赛5.22-2

    不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...

  5. NOIP模拟赛csy2021/10/30

    NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...

  6. 【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告

    [WZOI第二次NOIP模拟赛Day1T2]世界末日 Problem 2 世界末日 (doomsday.pas/c/cpp) 背景 话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西, ...

  7. NOIP 模拟赛 长寿花 题解

    NOIP 模拟赛 长寿花 题解 要放 \(n\) 层物品,第 \(i\) 层有 \(a_i\) 个位置放物品,物品有 \(m\) 中颜色,有约束条件: 同一层两个相邻物品颜色不能相同. 相邻两层颜色集 ...

  8. 辣鸡(ljh) NOIP模拟赛 模拟 平面几何 数论 化学相关(雾)

    [题目描述] 辣鸡ljhNOI之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的ljh却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的:在一个二维平面上有一层水分 ...

  9. NOIP模拟赛套路技巧经验总结

    前言 还有2天就NOIP了,之前做了这么多场模拟赛,是时候拿出来总结一下, 算是给自己一针强心剂. 列表 从最近的考试总结起(个人认为的重点,可能有重复,仅供参考): (转化很重要,一定要简化问题过后 ...

最新文章

  1. Android 设计模式:(三)装饰者模式 —— 装饰对象
  2. TeamCity 和 Nexus 的使用
  3. 【Linux+Mono+Asp.net公开课】视频下载
  4. OVS vswitchd启动(三十八)
  5. 忘记SAP系统Client 000的所有账号密码
  6. MarkdownPad 汉化破解(含下载地址)
  7. python--迭代,生成
  8. vmware-tools安装失败
  9. java支付宝支付_Java 高并发环境下的性能优化,揭秘支付宝技术内幕
  10. glusterfs的一些基本知识
  11. 【ARM】Linux驱动移植
  12. 相机和镜头选型的关键:像素尺寸与景深
  13. 【Laravel笔记】13. 模型的关联写入
  14. dubbo+nacos+xml(nacos替换zookeeper)
  15. 工业防腐漆的作用,你知道的有几个
  16. Unity引擎制作仿《文明》游戏
  17. python编辑七段数码管引脚图_少儿Python程序第十二讲:单片机控制数码管
  18. MATLAB教程(1) MATLAB 基础知识
  19. 中国1978-2008年GDP与M2关系的实证分析
  20. MindManager2020官方免费版下载激活版思维导图

热门文章

  1. Android读取手机上所有APP列表
  2. 在WINDOWS下的Services.mscl里有好几个ORACLE的SERVICES的一些作用
  3. 文件和文件夹的操作——文件流的使用
  4. 由浅入深学java pdf_由浅入深学Java:基础、进阶与必做260题 PDF_IT教程网
  5. 短链接java代码_java高仿新浪微博短链接地址生成工具ShortUrlGenerator.java
  6. PHP如何启动scrapy,python,_新手Scrapy爬虫运行问题,python - phpStudy
  7. Web前端和后端的异同
  8. 在Vue项目中使用LayUI教程且解决laydate无效的问题
  9. vue渲染大量数据如何优化_大数据量场景下的Vue性能优化
  10. 常见windows字体和MacOS字体分类主要有几种?