2017 [六省联考] T2 相逢是问候
4869: [Shoi2017]相逢是问候
Time Limit: 40 Sec Memory Limit: 512 MB
Submit: 1205 Solved: 409
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 3 4
0 1 4
1 2 4
0 1 4
1 1 3
Sample Output
3
HINT
鸣谢多名网友提供正确数据,已重测!
Source
#include<bits/stdc++.h>
#define ll long long
#define maxn 50005
using namespace std;
int P[30],n,m,a[maxn];
int f[maxn],len,C,opt,TP;
int le,ri,tim[maxn],val[maxn];
set<int> s;
//set<int> ::iterator it; inline int add(int x,int y,const int ha){
x+=y;
return x>=ha?x-ha:x;
} inline int mod(int x,int y,const int ha){
ll P=x*(ll)y;
return P>=ha?P%ha+ha:P;
} inline int phi(int x){
int y=1;
for(int i=2;i*(ll)i<=x;i++) if(!(x%i)){
y*=(i-1),x/=i;
while(!(x%i)) x/=i,y*=i;
if(x==1) break;
} if(x!=1) return y*(x-1);
else return y;
} inline void update(int x,int y){
for(;x<=n;x+=x&-x) f[x]=add(f[x],y,P[0]);
} inline int query(int x){
int an=0;
for(;x;x-=x&-x) an=add(an,f[x],P[0]);
return an;
} inline int ksm(int x,int y,const int ha){
int an=1;
for(;y;y>>=1,x=mod(x,x,ha)) if(y&1) an=mod(an,x,ha);
return an;
} /*
int get(int sit,int pos){
if(sit==TP) return a[pos]>=P[sit]?a[pos]%P[sit]+P[sit]:a[pos];
else return ksm(C,get(sit+1,pos),P[sit]);
}
*/ inline void TOL(){
int now=*s.lower_bound(le);
for(;now<=ri;now=*s.upper_bound(now)){
update(now,P[0]-val[now]);
tim[now]++,TP=tim[now]; if(tim[now]>len) val[now]=1;
else val[now]=(a[now]>=P[TP]?a[now]%P[TP]+P[TP]:a[now]);
for(int i=TP-1;i>=0;i--){
val[now]=ksm(C,val[now],P[i]);
}
val[now]%=P[0]; update(now,val[now]); if(tim[now]==len+1) s.erase(now);
}
} int main(){
// freopen("9.in","r",stdin);
// freopen("9.out","w",stdout); scanf("%d%d%d%d",&n,&m,P,&C);
for(len=1;;len++){
P[len]=phi(P[len-1]);
if(P[len]==1) break;
}
s.insert(0),s.insert(n+1);
for(int i=1;i<=n;i++){
scanf("%d",a+i);
update(i,a[i]);
s.insert(i);
val[i]=a[i];
} while(m--){
scanf("%d%d%d",&opt,&le,&ri);
if(opt) printf("%d\n",add(query(ri),P[0]-query(le-1),P[0]));
else TOL();
} return 0;
}
2017 [六省联考] T2 相逢是问候的更多相关文章
- 2017 [六省联考] T5 分手是祝愿
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 458 Solved: 299[Submit][Statu ...
- 2017 [六省联考] T1 期末考试
4868: [Shoi2017]期末考试 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 842 Solved: 385[Submit][Status ...
- 2017 [六省联考] T6 寿司餐厅
4873: [Shoi2017]寿司餐厅 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 450 Solved: 316[Submit][Status ...
- 洛谷 P3747 [六省联考2017]相逢是问候 解题报告
P3747 [六省联考2017]相逢是问候 题目描述 \(\text {Informatik verbindet dich und mich.}\) 信息将你我连结. \(B\) 君希望以维护一个长度 ...
- [BZOJ4869][六省联考2017]相逢是问候(线段树+扩展欧拉定理)
4869: [Shoi2017]相逢是问候 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 1313 Solved: 471[Submit][Stat ...
- 六省联考2017 Day1
目录 2018.3.18 Test T1 BZOJ.4868.[六省联考2017]期末考试 T2 T3 BZOJ.4870.[六省联考2017]组合数问题(DP 矩阵快速幂) 总结 考试代码 T1 T ...
- 六省联考2017 Day2
目录 2018.3.27 Test 总结 T1 T2 T3 BZOJ.4873.[六省联考2017]寿司餐厅(最小割ISAP 最大权闭合子图) 考试代码 T1 T2 T3 2018.3.27 Test ...
- [luogu] P3745 [六省联考2017]期末考试 (贪心)
P3745 [六省联考2017]期末考试 题目描述 有 \(n\) 位同学,每位同学都参加了全部的 \(m\) 门课程的期末考试,都在焦急的等待成绩的公布. 第 \(i\) 位同学希望在第 \(t_i ...
- 【BZOJ4873】[六省联考2017]寿司餐厅(网络流)
[BZOJ4873][六省联考2017]寿司餐厅(网络流) 题面 BZOJ 洛谷 题解 很有意思的题目 首先看到答案的计算方法,就很明显的感觉到是一个最大权闭合子图. 然后只需要考虑怎么构图就行了. ...
随机推荐
- vim中,在编辑模式下如何快速移动光标
编辑 ~/.vimrc 配置文件,加入如下行,编辑模式下自定义的快捷键 inoremap <C-o> <Esc>o inoremap <C-l> <Righ ...
- stm32F4中断分析-HAL库
详细可以参考: STM32使用HAL库操作外部中断——实战操作 https://www.cnblogs.com/wt88/p/9624103.html /** ******************** ...
- Linux扩增卷组、逻辑卷以及缩减逻辑卷
今天我们将了解怎样来扩展卷组,扩展和缩减逻辑卷.在这里,我们可以缩减或者扩展逻辑卷管理(LVM)中的分区,LVM也可称之为弹性卷文件系统. 前置需求使用LVM创建弹性磁盘存储——第一部分 什么时候我们 ...
- Cplex: MIP Control Callback
*本文主要记录和分享学习到的知识,算不上原创 *参考文献见链接 之前,我们有简单提到Cplex中的MIP Callback Interface,包括了Informational callback, q ...
- redis--py操作redis【转】
Python操作redis 请给作者点赞--> 原文链接 python连接方式:点击 下面介绍详细使用 1.String 操作 redis中的String在在内存中按照一个name对应一个val ...
- CodeForces 379F 树的直径 New Year Tree
题意:每次操作新加两个叶子节点,每次操作完以后询问树的直径. 维护树的直径的两个端点U,V,每次计算一下新加进来的叶子节点到U,V两点的距离,如果有更长的就更新. 因为根据树的直径的求法,若出现新的直 ...
- STL学习笔记2--list
List --- 双向列表 List是线性列表结构,数据查找需要一个接一个,不能直接得到元素地址,检索时间与目标元素的位置成正比.但是插入数据比较快,可以在任何位置插入数据或者删除数据.list特点是 ...
- CCF第四题无向图打印路径 欧拉问题
#include<iostream> #include<vector> #include<algorithm> #include<stack> #def ...
- 九度oj 题目1513:二进制中1的个数
题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 输入: 输入可能包含多个测试样例. 对于每个输入文件,第一行输入一个整数T,代表测试样例的数量.对于每个测试样例输入为一个 ...
- 分区脚本(fdisk)
#!/bin/bash echo "np w" | fdisk /dev/sdc && mkfs -t /dev/sdc1