CF633H Fibonacci-ish II(莫队+线段树)
温馨提示:本题十分卡常数,我手动开O2才过的。而数据范围不伦不类的n<=30000,常数小的O(n2)居然比O(n√nlogn)跑得快……
考虑插进去一个元素对答案产生的影响。原本数列为Σa[i]f[i],其中1<=i<=n,然后考虑在k位置插入a[0],答案显然是a[1]f[1]+a[2]f[2]+...+a[0]f[k]+a[k]f[k+1]+...+a[n]f[n+1],然后直接区间加斐波那契数显然是不可能的。这时候要向后转移斐波那契数列,(a,b)->(a+b,a)->(2a+b,a+b)->(3a+2b,2a+b)->……系数始终是斐波那契数。
删除时向前转移?系数可以和斐波那契数一起直接求。
我是开O2、O3、Ofast优化才过的,如果能正常过可能会换成常数较小的code吧
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#include<bits/stdc++.h>
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;
typedef pair<int,int>pii;
const int N=;
struct node{int l,r,id;}q[N];
int n,m,B,Q,mod,f[N],g[N],vis[N],a[N],w[N],sz[N<<],lazy[N<<],c[N<<][],ans[N];
pii p[N];
bool cmp(node a,node b){return (a.l-)/B==(b.l-)/B?a.r<b.r:a.l<b.l;}
void pushup(int rt)
{
sz[rt]=sz[rt<<]+sz[rt<<|];
c[rt][]=(c[rt<<][]+c[rt<<|][])%mod;
c[rt][]=(c[rt<<][]+c[rt<<|][])%mod;
}
void add(int rt,int k)
{
lazy[rt]+=k;
int a=c[rt][],b=c[rt][];
if(k>)c[rt][]=(1ll*a*f[k+]+1ll*b*f[k])%mod,c[rt][]=(1ll*a*f[k]+1ll*b*f[k-])%mod;
else k=-k,c[rt][]=(1ll*a*g[k-]+1ll*b*g[k])%mod,c[rt][]=(1ll*a*g[k]+1ll*b*g[k+])%mod;
}
void pushdown(int rt){if(lazy[rt])add(rt<<,lazy[rt]),add(rt<<|,lazy[rt]),lazy[rt]=;}
void update(int k,int v,int d,int l,int r,int rt)
{
if(l==r)
{
if(v==-)c[rt][]=c[rt][]=sz[rt]=;
else c[rt][]=1ll*f[v]*a[l]%mod,c[rt][]=1ll*f[v-]*a[l]%mod,sz[rt]=;
return;
}
pushdown(rt);
int mid=l+r>>;
if(k<=mid)update(k,v,d,lson),add(rt<<|,d);
else update(k,v+(v!=-)*sz[rt<<],d,rson);
pushup(rt);
}
void add(int x)
{
if(!x)return;
if(!vis[x])update(x,,,,m,);
vis[x]++;
}
void del(int x)
{
if(!x)return;
vis[x]--;
if(!vis[x])update(x,-,-,,m,);
}
int main()
{
scanf("%d%d",&n,&mod),B=;
f[]=f[]=;
for(int i=;i<=n+;i++)f[i]=(f[i-]+f[i-])%mod;
g[]=,g[]=mod-;
for(int i=;i<=n+;i++)g[i]=(g[i-]-g[i-]+mod)%mod;
for(int i=,x;i<=n;i++)scanf("%d",&x),p[i]=pii(x,i);
sort(p+,p+n+);
for(int i=,lst=1e9+;i<=n;i++)
{
if(lst!=p[i].first)lst=p[i].first,a[++m]=lst%mod;
w[p[i].second]=m;
}
scanf("%d",&Q);
if(mod==){while(Q--)puts("");return ;}
for(int i=;i<=Q;i++)scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i;
sort(q+,q+Q+,cmp);
for(int i=,l=,r=;i<=Q;i++)
{
while(r<q[i].r)add(w[++r]);
while(r>q[i].r)del(w[r--]);
while(l<q[i].l)del(w[l++]);
while(l>q[i].l)add(w[--l]);
ans[q[i].id]=c[][];
}
for(int i=;i<=Q;i++)printf("%d\n",ans[i]);
}
CF633H Fibonacci-ish II(莫队+线段树)的更多相关文章
- 【CF633H】Fibonacci-ish II 莫队+线段树
[CF633H]Fibonacci-ish II 题意:给你一个长度为n的序列$a_i$.m个询问,每个询问形如l,r:将[l,r]中的所有$a_i$排序并去重,设得到的新数列为$b_i$,求$b_1 ...
- Codeforces 666E E - Forensic Examination SA + 莫队 + 线段树
E - Forensic Examination 我也不知道为什么这个复杂度能过, 而且跑得还挺快, 数据比较水? 在sa上二分出上下界, 然后莫队 + 线段树维护区间众数. #include< ...
- 洛谷P3246 序列 [HNOI2016] 莫队/线段树+扫描线
正解:莫队/线段树+扫描线 解题报告: 传送门! 似乎是有两种方法的,,,所以分别港下好了QAQ 第一种,莫队 看到这种询问很多区间之类的就会自然而然地想到莫队趴?然后仔细思考一下,发现复杂度似乎是欧 ...
- Manthan, Codefest 16 H. Fibonacci-ish II 大力出奇迹 莫队 线段树 矩阵
H. Fibonacci-ish II 题目连接: http://codeforces.com/contest/633/problem/H Description Yash is finally ti ...
- [hdoj6483][莫队+线段树/ST]
A Sequence Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- [bzoj4358]permu:莫队+线段树/回滚莫队
这道题是几天前水过去的,现在快没印象了,水一发. 首先我们看到它让求解的是最长的值域 连续段长度,很好. 然后就想到了山海经,但但是我还没有做. 然后又想到了很久以前的一次考试的T3旅馆hotel(我 ...
- BZOJ 4129 树上带修莫队+线段树
思路: 可以先做做BZOJ3585 是序列上的mex 考虑莫队的转移 如果当前数字出现过 线段树上把它置成1 对于询问 二分ans 线段树上查 0到ans的和 是不是ans+1 本题就是把它搞到了序列 ...
- bzoj 3289: Mato的文件管理 莫队+线段树
题目链接 给一些询问,每个询问给出区间[L, R] , 求这段区间的逆序数. 先分块排序, 然后对于每次更改, 如果是更改L, 那么应该查询区间内比他小的数的个数, 如果更改R, 查区间内比他大的数的 ...
- BZOJ 4358 坑 莫队+线段树 死T
这是一个坑 竟然卡nsqrt(n)logn T死 等更 //By SiriusRen #include <cmath> #include <cstdio> #include & ...
随机推荐
- hdu 1087 最长上升序列和 dp
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- MySQL8.0安装caching_sha2_password问题
MySQL安装之后无法用工具连接上本地数据库 详情原因可见: https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-pl ...
- 18 ~ express ~ 前台分类导航展示 与 排序
一,前台分类导航展示 1,后台文件: /router/main.js router.get('/',(req,res,next)=>{ /** * 从数据库中读取分类信息 * rs是一个数组类 ...
- PHP ~ 原生语法 ~ 根据从数据库查询数据之后快速输出 某个属性的值到 到页面
一,根据 id 来查询单个的数据 <?php require_once '../../conn.php'; $sql = "select * from blogarticle wher ...
- prometheus配置简介
参考网页:https://my.oschina.net/wangyunlong/blog/3060776 global: scrape_interval: 15s evalua ...
- 数据库连接池DBCP的使用
一.直接使用代码链接(一般企业开发不用这种方式) 1.导入JAR 把jar包拷贝到lib文件夹里面然后右击 build path一下 2.建一个jdbc.proprtties文件 driverClas ...
- electron app弹出默认对话框后页面失去焦点问题
最近再做electron app程序的做删除数据操作的时候遇到一个诡异的bug,页面点击删除按钮后,弹出确认对话框后,页面失去焦点,文本框无法点击输入任何参数,但是使用浏览器操作正常,最后确定是ele ...
- 一天一个设计模式——模板方法(Template Method)模式
一.模式说明 现实世界中的模板是用于将事物的结构规律予以固定化.标准化的成果,它体现了结构形式的标准化.例如镂空文字印刷的模板,通过某个模板印刷出来的文字字体大小都是一模一样,但是具体使用什么材质的颜 ...
- 了解redis
redis:非关系型数据库,基于内存高性能,key-value存储,一般用作缓存,开源的使用ANSI C语言编写,遵守BSD协议,支持网络,可基于内存亦可持久化的日志型.Key-Value数据库,并提 ...
- VBA代码优化及其他设置操作
一.代码优化的一些方法 尽量减少在循环中遍历调用对象,公式计算 (操作VBA代码若出现屏幕闪屏,会拖慢运行速度),可以禁止屏幕闪屏.多用在操作工作表/薄,单元格的时候. Application.Scr ...