Codeforces 633H. Fibonacci-ish II
题目大意:
一个数列 q次询问 每次询问l r
将数列中l-r的位置排序去重后的数列成为b
输出 sigma b i * F i (其中F i为斐波那契数列中的第i项)
思路:
由于要去重 考虑权值线段树 于是先把整个数列离散
区间+不会=莫队 由于n为30000 考虑每次修改log n的复杂度
用线段树维护当前线段的答案 数字个数
发现并不会维护
因为我们需要把 1-a 1-b 的这两个区间合并为 1- a+b
看了一波tutorial 发现:

(尝试证明 但由于水平太菜只能用通项公式口胡)
这样的话就可以维护了 在线段树内再维护一下那个东西即 答案多项式的系数变为斐波那契前一项
就搞完了
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define inf 2139062143
#define ll long long
#define MAXN 30100
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,m,MOD,bl[MAXN],sz,g[MAXN],vis[MAXN],to[MAXN],val[MAXN];
int res[MAXN<<],tag[MAXN<<],sum[MAXN<<],f[MAXN],ans[MAXN];
struct data {int l,r,id;}q[MAXN];
bool cmp(data a,data b)
{
if(bl[a.l]==bl[b.l]) return a.r<b.r;
return a.l<b.l;
}
inline void upd(int k)
{
sum[k]=sum[k<<]+sum[k<<|];int lv=sum[k<<];
res[k]=(res[k<<]+(f[lv+]*res[k<<|])%MOD+(f[lv]*tag[k<<|])%MOD)%MOD;
if(lv) tag[k]=(tag[k<<]+(f[lv]*res[k<<|])%MOD+(f[lv-]*tag[k<<|])%MOD)%MOD;
else tag[k]=(tag[k<<]+tag[k<<|])%MOD;
}
void mdf(int k,int l,int r,int x,int w)
{
if(l==r) {tag[k]=,sum[k]=w,res[k]=w?g[l]:;return ;}
int mid=l+r>>;
if(x<=mid) mdf(k<<,l,mid,x,w);
else mdf(k<<|,mid+,r,x,w);
upd(k);
}
inline void add(int x)
{
vis[x]++;if(vis[x]-) return ;
mdf(,,n,x,);
}
inline void del(int x)
{
vis[x]--;if(vis[x]) return ;
mdf(,,n,x,);
}
int main()
{
n=read(),MOD=read(),sz=sqrt(n);int N;
for(int i=;i<=n;i++) val[i]=g[i]=read(),bl[i]=(i-)/sz,f[i]= i<=?:(f[i-]+f[i-])%MOD;
sort(g+,g+n+);N=unique(g+,g+n+)-g-;
for(int i=;i<=n;i++) to[i]=lower_bound(g+,g+N+,val[i])-g;
m=read();
for(int i=;i<=m;i++) q[i].l=read(),q[i].r=read(),q[i].id=i;
sort(q+,q+m+,cmp);n=N;int l=q[].l,r=q[].l-;
for(int i=;i<=m;i++)
{
while(l>q[i].l) add(to[--l]);
while(l<q[i].l) del(to[l++]);
while(r<q[i].r) add(to[++r]);
while(r>q[i].r) del(to[r--]);
ans[q[i].id]=res[];
}
for(int i=;i<=m;i++) printf("%d\n",ans[i]);
}
Codeforces 633H. Fibonacci-ish II的更多相关文章
- CodeForces - 633H :Fibonacci-ish II(正解:莫对+线段树)
Yash is finally tired of computing the length of the longest Fibonacci-ish sequence. He now plays ar ...
- Codeforces 633H Fibonacci-ish II【线段树】
LINK 题目大意 给你一个序列a,Q次询问,每次询问\([l,r]\) 把\([l,r]\)的数排序去重,得到序列b,f是斐波那契数列 求\(\sum_{b=1}^{len} b_if_i\) 思路 ...
- [莫队算法 线段树 斐波那契 暴力] Codeforces 633H Fibonacci-ish II
题目大意:给出一个长度为n的数列a. 对于一个询问lj和rj.将a[lj]到a[rj]从小到大排序后并去重.设得到的新数列为b,长度为k,求F1*b1+F2*b2+F3*b3+...+Fk*bk.当中 ...
- Codeforces 193E - Fibonacci Number(打表找规律+乱搞)
Codeforces 题目传送门 & 洛谷题目传送门 蠢蠢的我竟然第一眼想套通项公式?然鹅显然 \(5\) 在 \(\bmod 10^{13}\) 意义下并没有二次剩余--我真是活回去了... ...
- Codeforces 126D Fibonacci Sums 求n由随意的Sum(fib)的方法数 dp
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq574857122/article/details/34120269 题目链接:点击打开链接 题意 ...
- Codeforces Gym101257F:Islands II(求割点+思维)
http://codeforces.com/gym/101257/problem/F 题意:给出一个n*m的地图,上面相同数字的代表一个国家,问对于每个国家有多少个国家在它内部(即被包围).例如第一个 ...
- CodeForces 346C Number Transformation II
Number Transformation II 题解: 对于操作2来说, a - a % x[i] 就会到左边离a最近的x[i]的倍数. 也就是说 [ k * x[i] + 1, (k+1)* x ...
- Codeforces 346C Number Transformation II 构造
题目链接:点击打开链接 = = 990+ms卡过 #include<stdio.h> #include<iostream> #include<string.h> # ...
- codeforces 687D Dividing Kingdom II 带权并查集(dsu)
题意:给你m条边,每条边有一个权值,每次询问只保留编号l到r的边,让你把这个图分成两部分 一个方案的耗费是当前符合条件的边的最大权值(符合条件的边指两段点都在一个部分),问你如何分,可以让耗费最小 分 ...
随机推荐
- POJ-2689 Prime Distance,区间素数筛法
Prime Distance 只会埃氏筛法的弱鸡今天读了读挑战程序设计120页,明白了求小区间内素数的方 ...
- [luoguP2073] 送花(set)
传送门 set #include <set> #include <cstdio> #include <iostream> #define LL long long ...
- MTK GPIO 新增变量配置
主要涉及的文件: 1.需要配置preloader ,lk ,kernel vendor GPIO_YuSu.cmp文件增加IO别名: 2.需要配置preloader ,lk ,kernel vendo ...
- [USACO13NOV]空荡荡的摊位Empty Stalls
题目描述 Farmer John's new barn consists of a huge circle of N stalls (2 <= N <= 3,000,000), numbe ...
- C++内存分配方式——(别人的博客)
http://www.cnblogs.com/easonpan/archive/2012/04/26/2471153.html http://blog.csdn.net/chen825919148/a ...
- Java中的数字
以下内容引用自http://wiki.jikexueyuan.com/project/java/numbers.html: 通常情况下,当处理数字时,使用原始数据类型,如byte,int,long,d ...
- IOS开发 ios7适配
ios7控制器试图默认为全屏显示,导航栏的不同设置会产生不同的效果. 首先判断系统的的版本,区别: if (floor(NSFoundationVersionNumber) <= NSFound ...
- CentOS 7.0安装Zimbra 8.6邮件服务器
Zimbra的核心产品是Zimbra协作套件(Zimbra Collaboration Suite,简称ZCS). 系统:Centos7 ip地址:192.168.127.131 安装前准备 1.关闭 ...
- XP 系统如何安装.NET Framework4.0
1 运行CMD,然后输入命令net stop WuAuServ 2 打开C盘的Windows目录,然后找到SoftwareDistribution文件夹改名为SDold. 3 在CMD窗口中输 ...
- 国内博客(blog)搬家工具(服务)大全
如今网络上的博客搬家 服务,博客搬家工具 越来越多,博客联盟 大概收集了下,希望对那些想搬家的博客有所帮助. 一.和讯博客的“搬家公司”提供博客搬家 服务 搬家服务地址:点这里 目标对象:新浪博客 . ...