BZOJ 4597 随机序列
一定要想到,对于一个空位如果填了+,那么一定有一个表达式这里填-号使得后面的全部抵消掉。这点十分重要。
于是发现这个答案只和前缀积有关,线段树维护即可。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100500
#define mod 1000000007
using namespace std;
long long n,q,table[maxn],a[maxn],x,y;
long long root,tot=,ls[maxn<<],rs[maxn<<],sum1[maxn<<],sum2[maxn<<];
void get_table()
{
table[]=;
for (long long i=;i<=;i++)
table[i]=(table[i-]*)%mod;
}
void pushup(long long now,long long left,long long right)
{
long long mid=(left+right)>>;
long long ret1,ret2,ret3;
ret1=((sum1[ls[now]]-sum2[ls[now]])+mod);
ret2=sum2[ls[now]];
ret3=sum1[rs[now]];
sum1[now]=(((ret1*table[right-mid])%mod+((ret2*table[right-mid-])%mod*)%mod)%mod+(ret3*ret2)%mod)%mod;
sum2[now]=(sum2[ls[now]]*sum2[rs[now]])%mod;
}
void build(long long &now,long long left,long long right)
{
now=++tot;
if (left==right)
{
sum1[now]=sum2[now]=a[left]%mod;
return;
}
long long mid=(left+right)>>;
build(ls[now],left,mid);
build(rs[now],mid+,right);
pushup(now,left,right);
}
void modify(long long now,long long left,long long right,long long pos,long long x)
{
if (left==right)
{
sum1[now]=sum2[now]=x%mod;
return;
}
long long mid=(left+right)>>;
if (pos<=mid) modify(ls[now],left,mid,pos,x);
else modify(rs[now],mid+,right,pos,x);
pushup(now,left,right);
}
int main()
{
scanf("%lld%lld",&n,&q);
for (long long i=;i<=n;i++)
scanf("%lld",&a[i]);
get_table();
build(root,,n);
for (long long i=;i<=q;i++)
{
scanf("%lld%lld",&x,&y);
modify(root,,n,x,y);
printf("%lld\n",sum1[root]%mod);
}
return ;
}
BZOJ 4597 随机序列的更多相关文章
- BZOJ 4597: [Shoi2016]随机序列
4597: [Shoi2016]随机序列 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 255 Solved: 174[Submit][Status ...
- bzoj 4597||洛谷P4340 [Shoi2016]随机序列
https://www.lydsy.com/JudgeOnline/problem.php?id=4597 https://www.luogu.org/problemnew/show/P4340 妄图 ...
- BZOJ 4597: [Shoi2016]随机序列 线段树 + 思维
Description 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 Ai+1 间都插入一个加号或者 减号或者乘号.那么一共有 3^(n-1) 种可能的表 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
随机推荐
- js获取服务器时间
Ajax HTTP Head法原理:一般服务器在发送静态页面的时候(apache, nginx, lighttpd就目前所知)都是会在 HTTP 头里带一个Date的头信息的,那么我用Ajax直接取头 ...
- iOS-xib(自定义UITableViewCell)
1.创建一个自定义的xib
- Android Service学习
Android 中的 Service 全面总结 引用别人的博客:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html 好文章 1.S ...
- web工程导入MyEclipse 就变成Java工程 ———— 解决方案
Web 工程 导入到 MyEclipse 中后就变成 Java工程了 折腾大大半天,最后才发现是 .settings 里面文件的配置问题.. .settings 文件夹里面的 org.eclipse. ...
- 545D. Queue
http://codeforces.com/problemset/problem/545/D 题意:n个数的服务请求数组,求在其服务时间内,最大的可满足服务的请求数量 首先对服务请求数组按照从小到大排 ...
- java 语法错误 (操作符丢失) 在查询表达式
遇到的详细问题: a[0]="11"; a[1]="2223"; a[2]="333"; sta.executeUpdate("i ...
- C++运算符重载——重载二元运算符
1.重载二元操作符的方法 二元运算符又称为双目运算符,即需要2个操作数的运算符,例如 + - * / 等. 运算符重载可以分为3种方式:类的非静态成员函数.类的友元函数.普通函数. 例如有 2 个操作 ...
- AcmeAir安装AI探针--SaaS版
一.安装SaaS版AI探针准备工作: 1.准备好可用的docker版AcmeAir应用 2.在SaaS官网tpm.oneapm.com上已注册可用的账号 3.登录tpm.oneapm.com,点击选择 ...
- JavaWeb项目开发案例精粹-第4章博客网站系统-006View层
1.showAllArticle.jsp <%@ page language="java" contentType="text/html; charset=gb23 ...
- qt练习10 涂鸦板源代码
源代码下载: http://files.cnblogs.com/hnrainll/doodle.zip http://www.cnblogs.com/hnrainll/archive/2011/05/ ...