noip模拟赛 Nephren Ruq Insania
题目背景
大样例下发链接: 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 = ; int n, m, prime[], phi[], cnt, flag[maxn];
long long tag[maxn << ], c[maxn << ], a[maxn], L[maxn << ], R[maxn << ];
bool vis[]; void init()
{
phi[] = ;
for (int i = ; i <= ; i++)
{
if (!vis[i])
{
prime[++cnt] = i;
phi[i] = i - ;
}
for (int j = ; j <= cnt; j++)
{
int t = i * prime[j];
if (t > )
break;
vis[t] = ;
if (i % prime[j] == )
{
phi[t] = phi[i] * prime[j];
break;
}
phi[t] = phi[i] * (prime[j] - );
}
}
} void pushup(int o)
{
c[o] = c[o * ] + c[o * + ];
} void pushdown(int o)
{
if (tag[o])
{
tag[o * ] += tag[o];
tag[o * + ] += tag[o];
c[o * ] += (R[o * ] - L[o * ] + ) * tag[o];
c[o * + ] += (R[o * + ] - L[o * + ] + ) * tag[o];
}
tag[o] = ;
} 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) >> ;
build(o * , l, mid);
build(o * + , mid + , 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) >> ;
if (x <= mid)
update(o * , l, mid, x, y, v);
if (y > mid)
update(o * + , mid + , 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) >> ;
if (pos <= mid)
return query(o * , l, mid, pos);
else
return query(o * + , mid + , r, pos);
} long long Cal(int q)
{
if (flag[q] == m)
return a[q];
flag[q] = m;
return a[q] = query(, , n, q);
} long long qpow(long long a, long long b, long long mod)
{
a %= mod;
long long res = ;
while (b)
{
if (b & )
res = (res * a) % mod;
a = (a * a) % mod;
b >>= ;
}
return res;
} long long jisuan(int l, int r, int mod)
{
if (mod == )
return ;
if (l == r)
{
long long t = Cal(l);
if (t < mod) //直接算
return t % mod;
else
return (t % mod) + mod;
}
int minn = min(n, l + );
for (int i = l + ; i <= minn; i++)
if (Cal(i) == )
{
minn = i;
break;
}
long long p = Cal(minn), tot = ;
for (int i = minn - ; i >= l + ; i--)
{
tot = p;
p = ;
while (tot--)
{
p *= Cal(i);
if (p >= phi[mod])
return qpow(Cal(l) % mod, jisuan(l + , r, phi[mod]) + phi[mod], mod);
}
}
return qpow(Cal(l) % mod, jisuan(l + , r, phi[mod]), mod);
} int main()
{
memset(flag, -, sizeof(flag));
init();
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i++)
scanf("%lld", &a[i]);
build(, , n);
while (m--)
{
int op, l, r, mod;
scanf("%d%d%d%d", &op, &l, &r, &mod);
if (op == )
update(, , n, l, r, mod);
else
printf("%lld\n", jisuan(l, r, mod) % mod);
} return ;
}
noip模拟赛 Nephren Ruq Insania的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
随机推荐
- ambari集群里如何正确删除历史修改记录(图文详解)
不多说,直接上干货! 答:这些你想删除的话得得去数据库里删除,最好别删除 . 现在默认就是使用好的配置 欢迎大家,加入我的微信公众号:大数据躺过的坑 人工智 ...
- Oracle中的表空间
表空间是什么? Oracle数据库包含逻辑结构和物理结构. 数据库的物理结构是指构成数据库的一组操作系统文件. 数据库的逻辑结构是指描述数据组织方式的一组逻辑概念及它们之间的关系. 表空间是数据库数据 ...
- Abp Framework中文文档上线
感谢 ABP框架中国小组 给我们带来的ABP中文翻译,Web+为方便广大学习爱好者随时查阅,现推出了Gitbook风格的在线阅读文档:http://www.webplus.org.cn/documen ...
- VB6程序中NULL注意事项
VB6中从数据库中取出栏位值进行操作,若栏位值为Null,则必须小心处理,否则极易导致程序出错退出. 通常我们从recordset中取出栏位值采用Fields方法,加上栏位名称,如 rsMoney.F ...
- css定位position属性深究
1.static:对象遵循常规流.此时4个定位偏移属性不会被应用. 2.relative:对象遵循常规流,并且参照自身在常规流中的位置通过top,right,bottom,left这4个定位偏移属性进 ...
- zabbix_sender
转载一个python写的zabbix sender脚本 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import struc ...
- 恩智浦Freescale Cortex-A9 迅为IMX6开发板平台初体验
iTOP-i.MX6 开发板预装 Android4.4 系统,采用 9.7 寸(或者 7 寸或者 4.3 寸)IPS 屏 幕,至少 5 点以上触控,操作流畅,无论是高清视频.游戏等都会有上佳的表现,实 ...
- 数据层优化-jdbc连接池简述、druid简介
终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化 ...
- (转)淘淘商城系列——分布式文件系统FastDFS
http://blog.csdn.net/yerenyuan_pku/article/details/72801777 商品添加的实现,包括商品的类目选择,即商品属于哪个分类?还包括图片上传,对于图片 ...
- LeetCode137只出现一次的数字——位运算
题目 题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现三次.找出那个只出现一次的元素. 说明:你的算法应该具有线性时间的复杂度.你可以不使用额外的空间来实现吗? 思路 题 ...