Ynoi2016 炸脖龙重题了。

BZOJ 5394。

首先是扩展欧拉定理:

一开始傻掉了……递归的层数和区间长度无关……也就是说我们每一次直接暴力递归求解子问题一定不会超过$logP$层,因为当模数变成$1$了的时候,不管怎么乘方都不会再变化了。

然后要注意$b < \phi (P)$的情况,在快速幂的时候判断一下,如果超过了$\phi (P)$,那么就再加上一个$P$。

对于区间修改,树状数组或者线段树均可,每一层直接查询。

一共有不超过$logP$层,每一层有$logn$的开销查询元素,所以最后的复杂度是$O(Maxn + qlogP * logn)$。

另外,BZOJ上要把$pri$开成一半才不会爆空间……

Code:

#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll; const int N = 5e5 + ;
const int M = 2e7 + ;
const int Maxn = 2e7; int n, qn, pCnt = , pri[M / ];
ll a[N], phi[M];
bool np[M]; template <typename T>
inline void read(T &X) {
X = ; char ch = ; T op = ;
for(; ch > '' || ch < ''; ch = getchar())
if(ch == '-') op = -;
for(; ch >= '' && ch <= ''; ch = getchar())
X = (X << ) + (X << ) + ch - ;
X *= op;
} inline void sieve() {
phi[] = ;
for(int i = ; i <= Maxn; i++) {
if(!np[i]) pri[++pCnt] = i, phi[i] = i - ;
for(int j = ; j <= pCnt && pri[j] * i <= Maxn; j++) {
np[i * pri[j]] = ;
if(i % pri[j] == ) {
phi[i * pri[j]] = phi[i] * pri[j];
break;
}
phi[i * pri[j]] = phi[i] * (pri[j] - );
}
}
} namespace Bit {
ll s[N]; #define lowbit(p) (p & (-p)) inline void modify(int p, ll v) {
for(; p <= n; p += lowbit(p))
s[p] += v;
} inline ll query(int p) {
ll res = ;
for(; p > ; p -= lowbit(p))
res += s[p];
return res;
} } using namespace Bit; inline ll fpow(ll x, ll y, ll P) {
ll res = ; bool tag = , tagx = ;
for(; y > ; y >>= ) {
if(y & ) {
res = res * x;
tag |= tagx;
if(res >= P) res %= P, tag = ;
}
if(x >= P) x %= P, tagx = ;
x = x * x;
if(x >= P) x %= P, tagx = ;
}
return res + (tag ? P : );
} ll solve(int x, int y, ll P) {
if(P == ) return ;
if(x > y) return ;
ll val = a[x] + query(x), cur = solve(x + , y, phi[P]);
return fpow(val, cur, P);
} int main() {
sieve();
read(n), read(qn);
for(int i = ; i <= n; i++) read(a[i]);
for(int op, x, y; qn--; ) {
read(op), read(x), read(y);
if(op == ) {
ll v; read(v);
modify(x, v), modify(y + , -v);
} else {
ll P; read(P);
printf("%lld\n", solve(x, y, P) % P);
}
}
return ;
}

Luogu 3934 Nephren Ruq Insania的更多相关文章

  1. 洛谷3934:Nephren Ruq Insania——题解

    https://www.luogu.org/problemnew/show/P3934 题面自己读吧(滑稽. 看到这道题就能够想到BZOJ4869:[SHOI2017]相逢是问候我们曾经用过的哲学扩展 ...

  2. [洛谷3934]P3934 Nephren Ruq Insania题解

    先放个奈芙莲 解法 看到这种题目就知道是欧拉降幂,然后根据某玄学证明,递归欧拉降幂从l到r不会超过\(\Theta(log_n)\),所以直接递归解决,然后区间修改直接树状数组维护一下 然后就A了 代 ...

  3. [洛谷P4118][Ynoi2016]炸脖龙I([洛谷P3934]Nephren Ruq Insania)

    题目大意:有$n$个数,每个数为$s_i$,两个操作: $1\;l\;r\;x:$表示将区间$[l,r]$内的数加上$x$ $2\;l\;r\;p:$表示求$s_l^{s_{l+1}^{^{s_{l+ ...

  4. noip模拟赛 Nephren Ruq Insania

    题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg 注意:本题大样例4的输出文件修改为 https://pan.baidu.com/s/1b ...

  5. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下.Noip2007 树网的核:floyd,推出性质,暴力.Noip2008 笨小猴:模拟Noip2008 火柴棒等式:枚举Noip2008 传纸条:棋盘dpNoip2 ...

  6. Luogu 魔法学院杯-第二弹(萌新的第一法blog)

    虽然有点久远  还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题  沉迷游戏,伤感情 #include <queue> ...

  7. luogu p1268 树的重量——构造,真正考验编程能力

    题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...

  8. [luogu P2170] 选学霸(并查集+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...

  9. [luogu P2647] 最大收益(贪心+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...

随机推荐

  1. git,npm,bower设置代理地址

    我們先假設代理伺服器的位址為: http://10.0.0.1:8080 設定 Git 使用代理伺服器 輸入兩行指令即可設定完畢: git config --global https.proxy ht ...

  2. CI框架后台添加左侧导航栏出现的一系列问题

  3. CodeForces - 896D :Nephren Runs a Cinema(卡特兰数&组合数学---比较综合的一道题)

    Lakhesh loves to make movies, so Nephren helps her run a cinema. We may call it No. 68 Cinema. Howev ...

  4. B+树和LSM存储引擎代表树和B-树

    B+树和LSM比较 https://blog.csdn.net/u013928917/article/details/75912045    在关系型数据库mysql中普遍使用B+树作为索引,在实际中 ...

  5. Linux-CentOS7 安装VMware Workstation 12

    转自:http://blog.csdn.net/aoshilang2249/article/details/48656107 1.下载VMware 衔接地址 http://www.vmware.com ...

  6. java多线程 生产者消费者案例-虚假唤醒

    package com.java.juc; public class TestProductAndConsumer { public static void main(String[] args) { ...

  7. 取余运算(mod)(分治)

    [问题描述]        输入b,p,k的值,求bp mod k的值.其中b,p,k*k为长整形数. [输入样例]mod.in        2 10 9 [输出样例]mod.out         ...

  8. jsp有哪些内置对象?作用分别是什么?

    JSP共有以下9种基本内置组件 1.request对象 客户端请求,此请求会包含来自GET/POST请求的参数通过它才能了解到客户的需求,然后做出响应. 2.response对象 响应客户请求的有关信 ...

  9. es6变量的解构赋值学习笔记

    1. 解构赋值的规则是,只要等号右边的值不是对象,就先将其转为对象.由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错. let { prop: x } = undefin ...

  10. The Salt Master has rejected this minion's public key!

    salt查看日志: salt --log-level=all "10.199.165.244" state.highstate 进入调试模式: salt-minion -l deb ...