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. Java NIO(一) 初步理解NIO

    Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式. 为什么要使用 NIO? NIO ...

  2. UVA-11892(组合游戏)

    题意: 给n堆石子,每堆有ai个,每次可以取每堆中任意数目的石子;但是上一次操作的人没有将一堆全部取走,那么下一个人还要在那一堆取; 思路: 每次取到这堆就剩一个的策略; AC代码: #include ...

  3. app基础

    1界面:Layout 2.控件 3.整个窗口:Activity 4. ctrl + H : 查看类的继承关系 5. shift + F1:打开类的文档 6. Button button = (Butt ...

  4. HDU1496(巧妙hash)

    Equations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  5. bzoj4259

    fft 搞一个生成函数 对于每位A(j)=Σi=1->m (a[i]-b[i+j])^2*a[i]*b[i+j] 如果A(j)=0说明这位匹配 如果这位是*那么a[i]=0否则等于字母-'a'+ ...

  6. 896C

    ODT/珂朵莉树 原来这个东西很咸鱼,只能数据随机情况下nloglogn,不过作为卡常还是很好的 大概就是维护区间,值相同的并且连续当成一个区间存在set里,每次区间操作强行分裂就行了. 复杂度因为是 ...

  7. ImportCommon

    using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using S ...

  8. LWDB

    题意: 给一棵 $n$ 个节点的树,维护两种操作: 1.将距离 $x$ $distance \leq d$ 的点染成 $c$ 2.询问 $x$ 的颜色. 解法: 首先将染色可以转换为每个时间对应一个颜 ...

  9. POJ 3658 Artificial Lake (单调栈)

    题意: 析:利用单调栈,维护一个单调递增的栈,首先在最低的平台开始,每次向两边进行扩展,寻找两边最低的,然后不断更新宽度. 代码如下: #pragma comment(linker, "/S ...

  10. Srping MVC入门推荐

    看了不少大牛们的博客,对Spring MVC心里还是一团迷雾. 看了<Spring in Action>(Spring实战),疑惑渐渐明朗. 特推荐此书.