温馨提示:本题十分卡常数,我手动开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(莫队+线段树)的更多相关文章

  1. 【CF633H】Fibonacci-ish II 莫队+线段树

    [CF633H]Fibonacci-ish II 题意:给你一个长度为n的序列$a_i$.m个询问,每个询问形如l,r:将[l,r]中的所有$a_i$排序并去重,设得到的新数列为$b_i$,求$b_1 ...

  2. Codeforces 666E E - Forensic Examination SA + 莫队 + 线段树

    E - Forensic Examination 我也不知道为什么这个复杂度能过, 而且跑得还挺快, 数据比较水? 在sa上二分出上下界, 然后莫队 + 线段树维护区间众数. #include< ...

  3. 洛谷P3246 序列 [HNOI2016] 莫队/线段树+扫描线

    正解:莫队/线段树+扫描线 解题报告: 传送门! 似乎是有两种方法的,,,所以分别港下好了QAQ 第一种,莫队 看到这种询问很多区间之类的就会自然而然地想到莫队趴?然后仔细思考一下,发现复杂度似乎是欧 ...

  4. Manthan, Codefest 16 H. Fibonacci-ish II 大力出奇迹 莫队 线段树 矩阵

    H. Fibonacci-ish II 题目连接: http://codeforces.com/contest/633/problem/H Description Yash is finally ti ...

  5. [hdoj6483][莫队+线段树/ST]

    A Sequence Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  6. [bzoj4358]permu:莫队+线段树/回滚莫队

    这道题是几天前水过去的,现在快没印象了,水一发. 首先我们看到它让求解的是最长的值域 连续段长度,很好. 然后就想到了山海经,但但是我还没有做. 然后又想到了很久以前的一次考试的T3旅馆hotel(我 ...

  7. BZOJ 4129 树上带修莫队+线段树

    思路: 可以先做做BZOJ3585 是序列上的mex 考虑莫队的转移 如果当前数字出现过 线段树上把它置成1 对于询问 二分ans 线段树上查 0到ans的和 是不是ans+1 本题就是把它搞到了序列 ...

  8. bzoj 3289: Mato的文件管理 莫队+线段树

    题目链接 给一些询问,每个询问给出区间[L, R] , 求这段区间的逆序数. 先分块排序, 然后对于每次更改, 如果是更改L, 那么应该查询区间内比他小的数的个数, 如果更改R, 查区间内比他大的数的 ...

  9. BZOJ 4358 坑 莫队+线段树 死T

    这是一个坑 竟然卡nsqrt(n)logn T死 等更 //By SiriusRen #include <cmath> #include <cstdio> #include & ...

随机推荐

  1. python---生成式

    1.[(x,y) for x in [1,2,3] for y in [4,2,3] if x == y] (x,y):输出表达式,产生最终列表的元素 for x in [1,2,3] for y i ...

  2. POJ 3461:Oulipo

    Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28155   Accepted: 11251 Descript ...

  3. 3 ~ express ~ 静态文件托管

    静态资源文件处理 (一)设置静态资源托管目录 /* *  当 用户访问的 url 以 /public 开始 ,那么直接返回对应 __dirname + '/public' 下的文件  . 注意是双下划 ...

  4. Day1-T1

    原题目 Describe:普通前缀和(当然有升级版的题目,范围3000+) code: #include<bits/stdc++.h> #define maxn 1010 #define ...

  5. C++ 编程学习(六) 函数

    零.小知识点 1.函数返回类型可以是除数组外的自定义类型 一.传值调用 向函数传递参数的传值调用方法,把参数的实际值复制给函数的形式参数.在这种情况下,修改函数内的形式参数不会影响实际参数. 默认情况 ...

  6. EBGP的多跳与验证命令

    EBGP的多跳与验证命令: ①:neighbor router-id ebgp-multihop “int”——设置多跳. ②:neighbor router-id password “str”——设 ...

  7. DCGAN

    Deep Convolutional Generative Adversarial Networks we introduced the basic ideas behind how GANs wor ...

  8. JS页面校验

    结构: 1.导入正则表达式校验包:https://blog.csdn.net/weixin_44718300/article/details/88726653 2.页面校验.HTML <!DOC ...

  9. 腾讯电话面试总结(IEG后台开发)

    1 Java面向对象:设计window画板的类框架.假设现在只有  直线.矩形.椭圆,怎么设计 2 Linux shell命令  定时怎么做 3 平时有问题经常访问那些网站 4 假设你现在是web网站 ...

  10. web应用中并发控制的实现,各种锁的集合

    参考:http://blog.csdn.net/xiangwanpeng/article/details/55106732 B/S构架的应用越来越普及,但由于它有别于C/S构架的特殊性,并发控制始终没 ...