牛客练习赛10 F-序列查询(莫队+链表)
F-序列查询
#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
using ll=long long;
template <class T=int> T rd()
{T res=0;T fg=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();}while( isdigit(ch)) res=(res<<1)+(res<<3)+(ch^48),ch=getchar();return res*fg;
}
ll qmi(ll a,ll b,ll mod)
{ll v=1;while(b){if(b&1) v=v*a%mod;a=a*a%mod;b>>=1;}return v;
}
const int N=100005;
int Bs,b[N],a[N],n,m;
struct node
{int l,r,p,id;bool operator<(const node&o)const{if(b[l]==b[o.l]){if(b[l]&1) return r<o.r;return r>o.r;}return b[l]<b[o.l];}
}q[N];
int num[N],cnt[N];
ll sum[N];
int h,fr[N],ne[N];
int ans[N];
int mod;
void insert(int x)
{ne[x]=h;fr[h]=x;fr[x]=0;h=x;
}
void del(int x)
{if(h==x) return h=ne[x],void();ne[fr[x]]=ne[x];fr[ne[x]]=fr[x];
}
void update(int x,int v)
{// 出现个数为num[x]-xif(num[x]){sum[num[x]]-=x;cnt[num[x]]--;if(!cnt[num[x]]) del(num[x]);}num[x]+=v;if(num[x]){sum[num[x]]+=x;cnt[num[x]]++;if(cnt[num[x]]==1) insert(num[x]);}
}
int add(int a,int b)
{a+=b;if(a>=mod) a-=mod;return a;
}
int mul(int a,int b)
{ll z=1ll*a*b;return z-z/mod*mod;
}
int f[1005],g[1005];
void init(int n)
{f[0]=1;for(int i=1;i<=Bs;i++) f[i]=add(f[i-1],f[i-1]);g[0]=1;for(int i=1;i<=n/Bs;i++) g[i]=mul(g[i-1],f[Bs]);
}
int Pow(int n)
{return mul(g[n/Bs],f[n%Bs]);
}
int query(int l,int r,int p)
{mod=p;int len=r-l+1;init(n); int ans=0;for(int i=h;i;i=ne[i]) ans=add(ans,mul(sum[i]%p,add(Pow(len),p-Pow(len-i))));return ans;
}
int main()
{n=rd(),m=rd();for(int i=1;i<=n;i++) a[i]=rd();Bs=sqrt(n)+1;for(int i=1;i<=n;i++) b[i]=(i-1)/Bs+1;for(int i=1;i<=m;i++) q[i].l=rd(),q[i].r=rd(),q[i].p=rd(),q[i].id=i;sort(q+1,q+1+m);int l=1,r=0;for(int i=1;i<=m;i++){while(r<q[i].r) update(a[++r],1);while(r>q[i].r) update(a[r--],-1);while(l<q[i].l) update(a[l++],-1);while(l>q[i].l) update(a[--l],1);ans[q[i].id]=query(q[i].l,q[i].r,q[i].p);}for(int i=1;i<=m;i++) printf("%d\n",ans[i]);}
牛客练习赛10 F-序列查询(莫队+链表)相关推荐
- 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 牛客练习赛 43 F Tachibana Kanade Loves Game 容斥原理(Java版ac)
链接:https://ac.nowcoder.com/acm/contest/548/F 来源:牛客网 题目描述 立华奏是一个天天打比赛的萌新. 省选将至,萌新立华奏深知自己没有希望进入省队,因此开始 ...
- 牛客练习赛63 F 牛牛的树行棋 (SG函数+树差分)
链接:https://ac.nowcoder.com/acm/contest/5531/F 来源:牛客网 牛牛的树行棋 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K, ...
- 牛客练习赛29: F. 算式子
链接:https://www.nowcoder.com/acm/contest/211/F 来源:牛客网 题目描述 给定 个整数 .保证 . 对于每个 ,求出 .为了避免过量输出,你只需要将所 ...
- 牛客练习赛50 F tokitsukaze and Another Protoss and Zerg(分治NTT)
一些废话: 写完上一题(分治FFT)之后记起之前牛客写的这道题,题解是用启发式NTT,每次选两个项数最小的合并,当时没有整理NTT的模板所以就先mark了,今天受到分治FFT的启发,想用分治NTT来解 ...
- 牛客练习赛71 F 红蓝图(kruskal重构树)
红蓝图 给定两个参数x,tx, tx,t,删除边权大于ttt的红边,和边权小于ttt的蓝边,问对于所有的点yyy,既能通过红边走向xxx,又能通过蓝边走向xxx,的点有多少个. 考虑对红边按照边权升序 ...
- 牛客练习赛50 F tokitsukaze and Another Protoss and Zerg
tokitsukaze and Another Protoss and Zerg 考虑生成函数,每一场的生成函数为∑j=1b[i]Cb[i]j+∑j=1a[i]Ca[i]jxj\sum\limits_ ...
- 牛客练习赛63 F.牛牛的树行棋(博弈 SG函数)
题目链接:https://ac.nowcoder.com/acm/contest/5531/F 牛牛的树行棋 前置知识 思路 代码 前置知识 这道题目需要博弈论中的SG函数的知识,这里就不多赘述.主要 ...
- 【牛客网】牛客练习赛19 F 算式子【数学--递推 、前缀、数字】
传送门:算式子 花了一些时间理解AC的代码,震惊,代码真的是短小精悍,推理能力很强亦或者是做题多,见的多. 能够理解里面的逻辑真的挺难的 题意 给定n,m,\(1\le x\le m\),求\(\su ...
最新文章
- 实验5,利用三层交换机实现VLAN间路由
- 微软推出MSDN2008中文版有些仓促,中文的MSDN2008Beta2内容都是E文的...
- C语言经典例32-删除字符串中指定的字符
- ubuntu和windows双系统时间错乱问题
- 职业经理人应该如何处理如下问题
- 工质热物理性质计算程序的编制及应用_新能源动力电池热管理方案设计和热流体仿真...
- excel未完全加载怎么办_你知道如何改变Excel的打开姿势吗?
- [vue-cli]vue-cli怎么解决跨域的问题?
- win10查看端口占用
- Linux操作Oracle(16)——Oracle扩容报错:ORA-01144_表空间数据文件超出最大限制
- ATL接口映射宏详解
- matlab2013基础教程,Matlab2013a教程
- Oracle彻底卸载干净教程
- 580刷590bios_老司机带你开车,迪兰570怒刷580BIOS超频至1430M
- 实现导出excel,pdf功能
- 知乎好物推荐怎么做赚钱?该如何做?
- [h5py] 解决ImportError: libhdf5.so.103: cannot open shared object file: No such file or directory
- python3的numpy包中的numpy.logspace解析
- 【原创】5.4青年有感
- 有苦有乐的算法 --- 基数排序
热门文章
- 原型链的理解_javascript之快速理解(原型链)
- python创建一个空的dataframe_python 创建一个空dataframe 然后添加行数据的实例
- 各高校寒假时间公布_高校放假哪家长?多所高校寒假时间公布!
- eval() php,js-eval编码,js-eval解码
- python求函数极值_python 遗传算法求函数极值的实现代码
- 控制是否展示_现场展示板管理不在于看,而在于管!
- [C++STL]deque容器用法介绍
- 蓝桥杯2015初赛-饮料换购-枚举
- C++vector容器-插入和删除
- hash table(全域散列法实现的哈希表)