https://www.lydsy.com/JudgeOnline/problem.php?id=4597

https://www.luogu.org/problemnew/show/P4340

妄图直接暴力维护一堆东西,以直接维护题目要求的值(具体见代码...)

最后花了2个小时维护完了,A掉了,然而好像常数比别人大一倍?

上网搜题解,发现大部分东西都可以抵消掉??回想维护过程中,好像有一堆抵消掉的东西?

看来即使可以暴力维护,也还是要多观察题目性质...

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pii;
const ll md=1e9+;
ll n,q;
ll a[];
ll pw3[];
const ll N=;
#define lc (num<<1)
#define rc (num<<1|1)
ll d1[N],d2[N],d3[N],d4[N],d5[N];
//d1:区间乘积
//d2:区间和
//d3:除了全部是乘号外,所有选择方案靠左边全是乘号一段的积的和
//d4:除了全部是乘号外,...靠右边...(带符号)
//d5:答案
//维护过程中发现d4必定为0...
/*
举例:1,2,3
1+2+3,1+2-3,1+2*3,
1-2+3,1-2-3,1-2*3,
1*2+3,1*2-3,1*2*3
d3应当维护1*6+1*2*2=10
d4应当维护3*3-3*3+2*3-2*3=0
*/
void upd(ll l,ll r,ll num)
{
d1[num]=d1[lc]*d1[rc]%md;
d2[num]=(d2[lc]+d2[rc])%md;
ll mid=l+((r-l)>>);
d3[num]=(d3[lc]*pw3[r-mid]%md+d1[lc]**pw3[r-(mid+)]%md
+d1[lc]*d3[rc]%md)%md;
d4[num]=(d4[rc]*pw3[mid-l+]%md//+d1[rc]*2*pw3[mid-l]%md
+d1[rc]*d4[lc]%md)%md;
ll d4l=(d4[lc]+d1[lc])%md,d3r=(d3[rc]+d1[rc])%md;
/*
d5[num]=(2*(r-mid)*d5[lc]%md+(r-mid)*((d5[lc]-d4l+md)%md)%md
+(mid-l+1)*((d5[rc]-d3r+md)%md)%md
+d4l*d3r%md)%md;
*/
ll m=pw3[mid-l],n=pw3[r-(mid+)];
/*
d5[num]=(2*(r-mid)*d5[lc]%md+2*(mid-l+1)*d5[rc]%md
+pw3[mid-l]*(md-2)%md*d3r%md
+(r-mid)*((d5[lc]-d4l+md)%md)%md
+(mid-l+1)*((d5[rc]-d3r+md)%md)%md
+d4l*d3r%md)%md;
*/
d5[num]=(*n*d5[lc]%md+*m*d5[rc]%md
+m*(md-)%md*d3r%md
+n*((d5[lc]-d4l+md)%md)%md
+m*((d5[rc]-d3r+md)%md)%md
+d4l*d3r%md)%md; /*
d5[num]=(2*(r-mid)*d5[lc]%md+2*(mid-l+1)*d5[rc]%md
+pw3[mid-l]*(md-2)%md*d3r%md
+(r-mid)*((d5[lc]-d4l+md)%md)%md
+
printf("1t%lld %lld %lld %lld %lld %lld %lld\n",l,r,d1[num],d2[num],
d3[num],d4[num],d5[num]);
printf("2t%lld %lld %lld\n",(r-mid)*d5[lc]%md+(mid-l+1)*d5[rc]%md,
(r-mid)*d5[lc]%md+(mid-l+1)*d5[rc]%md+pw3[mid-l]*(md-2)%md*d3r%md,
(r-mid)*((d5[lc]-d4l+md)%md)%md
+(mid-l+1)*((d5[rc]-d3r+md)%md)%md
+d4l*d3r%md);
*/
}
void pre(ll l,ll num,ll x)
{
d1[num]=x;
d2[num]=x;
d3[num]=d4[num]=;
d5[num]=x;
}
void build(ll l,ll r,ll num)
{
if(l==r) {pre(l,num,a[l]);return;}
ll mid=l+((r-l)>>);
build(l,mid,lc);build(mid+,r,rc);
upd(l,r,num);
}
void setx(ll L,ll x,ll l,ll r,ll num)
{
if(l==r) {pre(l,num,x);return;}
ll mid=l+((r-l)>>);
if(L<=mid) setx(L,x,l,mid,lc);
else setx(L,x,mid+,r,rc);
upd(l,r,num);
}
int main()
{
ll i,x,y;
pw3[]=;
for(i=;i<=;i++)
pw3[i]=pw3[i-]*%md;
scanf("%lld%lld",&n,&q);
for(i=;i<=n;i++) scanf("%lld",&a[i]);
build(,n,);
//printf("%lld %lld %lld %lld %lld",d1[1],d2[1],d3[1],d4[1],d5[1]);
while(q--)
{
scanf("%lld%lld",&x,&y);
setx(x,y,,n,);
printf("%lld\n",d5[]);
}
return ;
}

bzoj 4597||洛谷P4340 [Shoi2016]随机序列的更多相关文章

  1. [洛谷P4340][SHOI2016]随机序列

    题目大意:有$n(n\leqslant10^5)$个数,每两个数之间可以加入$+-\times$三种符号,$q(q\leqslant10^5)$次询问,每次询问修改一个数后,所有表达式可能的值的和 题 ...

  2. [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)

    [BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...

  3. P4340 [SHOI2016]随机序列

    题目 P4340 [SHOI2016]随机序列 思维好题 做法 是否觉得水在于你是否发现加减是会抵消的,所以我们只用考虑乘的部分 一块乘只能前面无号(也就是前缀形式)才统计,所以用线段树维护区间前缀乘 ...

  4. bzoj 4816: 洛谷 P3704: [SDOI2017]数字表格

    洛谷很早以前就写过了,今天交到bzoj发现TLE了. 检查了一下发现自己复杂度是错的. 题目传送门:洛谷P3704. 题意简述: 求 \(\prod_{i=1}^{N}\prod_{j=1}^{M}F ...

  5. bzoj 1014: 洛谷 P4036: [JSOI2008]火星人

    题目传送门:洛谷P4036. 题意简述: 有一个字符串,支持插入字符,修改字符. 每次需要查询两个后缀的LCP长度. 最终字符串长度\(\le 100,\!000\),修改和询问的总个数\(\le 1 ...

  6. bzoj 3680(洛谷1337) 吊打XXX——模拟退火

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3680 https://www.luogu.org/problemnew/show/P1337 ...

  7. bzoj 4592(洛谷 4344) [Shoi2015]脑洞治疗仪——线段树上二分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4592 1操作就是用线段树来二分找到第一个有 k 个0的位置. 在洛谷上A了,与暴力和网上题解 ...

  8. Guard Duty (medium) Codeforces - 958E2 || (bzoj 2151||洛谷P1792) 种树 || 编译优化

    https://codeforces.com/contest/958/problem/E2 首先求出N个时刻的N-1个间隔长度,问题就相当于在这些间隔中选K个数,相邻两个不能同时选,要求和最小 方法1 ...

  9. bzoj 2005 & 洛谷 P1447 [ Noi 2010 ] 能量采集 —— 容斥 / 莫比乌斯反演

    题目:bzoj 2005 https://www.lydsy.com/JudgeOnline/problem.php?id=2005   洛谷 P1447 https://www.luogu.org/ ...

随机推荐

  1. cnn汉字识别 tensorflow demo

    # -*- coding: utf-8 -*- import tensorflow as tf import os import random import tensorflow.contrib.sl ...

  2. Vue表格数据增删改查及搜索

    <div id="app"> <div class="item"> <span class="name"> ...

  3. 在SQL SERVER 2008中通过已有的数据库生成建库脚本

  4. 使用diskpart命令修复U盘分区

    前段时间在论坛上讨论封装PE到u盘里热闹的,就想自己也封装一个,随便下载了一个WIN7的PE封装后发现还不错,本来就是做测试用的,测试完了就想把u盘在恢复成以前的样子,可是发现恢复并不是这么容易 如下 ...

  5. gsoap开发webservice

    gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多.绝大多数的C++web服务工具包提供一组API函数类库来处 ...

  6. 转:CURL库在程序中的运用浅析

    CURL库在程序中的运用浅析-nk_ysg-ChinaUnix博客 http://blog.chinaunix.net/uid-22476414-id-3286638.html 这个目录的文章转载fr ...

  7. js数组,在遍历中删除元素(用 for (var i in arr)是无效的 )

    /** * 有效的方式 - 改变下标,控制遍历 */ for (var i = 0; i < arr.length; i++) { if (...) { arr.splice(i, 1); // ...

  8. IReport制作报表——日期时间显示格式

    转自:https://blog.csdn.net/linglinglu/article/details/9022679?utm_source=blogxgwz2 IReport工具在制作报表的时候,会 ...

  9. Struts文件上传下载

    Struts配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PU ...

  10. centos时区

    执行:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime是将shanghai时区设置为系统时区 执行:date +%s 获取的是系统的utc时间戳 ...