题目链接

现在有一个有n个元素的数组a1, a2, ..., an

记f(i, j) = ai * ai+1 * ... * aj。

初始时,a1 = a2 = ... = an = 0,每次我会修改一个ai的值,你需要实时反馈给我 ∑1 <= i <= j <= n f(i, j)的值 mod 10007。

第一行包含两个数n(1<=n<=100000)和q(1<=q<=500000)。

接下来q行,每行包含两个数i, x,代表我把ai的值改为了x。

/*******************************************************/

记两个数的区间【a,b】

[a,b].sum = a+b+a*b;

[a,b].prefix = a+a*b;

[a,b].suffix = b+a*b;

[a,b].product = a*b;

当合并区间【a,b】和【c,d】时

有[a,b,c,d].sum = [a,b].sum+[c,d].sum+[a,b].suffix*[c,d].prefix;

[a,b,c,d].product = a*b*c*d = [a,b].product*[c,d].product;

.product的存在是为了维护prefix和suffix,因为:

[a,b,c,d].prefix = [a,b].prefix + [a,b].product*[c,d].prefix;

[a,b,c,d].suffix = [c,d].suffix + [c,d].product*[a,b].suffix;

#include <cstdio>
#include <cstring>
const int N = ;
const int MOD = ;
struct NODE{
int l,r;
int sum;
int prefix,suffix,product;
NODE(){
sum = prefix = suffix = product = ;
}
int MID(){ return (l+r)>>; }
};
NODE segtree[N*];
void build(int id,int l,int r){
segtree[id].l = l;
segtree[id].r = r;
if(l==r) return ;
int mid = (l+r)>>;
build(id*,l,mid);
build(id*+,mid+,r);
}
void modify(int id,int pos,int value){
if((segtree[id].l==segtree[id].r)&&(segtree[id].l==pos)){
segtree[id].sum = segtree[id].prefix = segtree[id].suffix = segtree[id].product = (value)%MOD;
return ;
}
int mid = segtree[id].MID();
if(pos<=mid) modify(id*,pos,value);
else modify(id*+,pos,value); segtree[id].sum = ((segtree[id*].sum+segtree[id*+].sum)+(segtree[id*].suffix*segtree[id*+].prefix)%MOD)%MOD;
segtree[id].prefix = (segtree[id*].prefix+(segtree[id*].product*segtree[id*+].prefix)%MOD)%MOD;
segtree[id].suffix = (segtree[id*+].suffix+(segtree[id*+].product*segtree[id*].suffix)%MOD)%MOD;
segtree[id].product = (segtree[id*].product*segtree[id*+].product)%MOD;
}
int main(){
int n,q,a,b;
scanf("%d%d",&n,&q);
build(,,n);
while(q--){
scanf("%d%d",&a,&b);
modify(,a,b);
printf("%d\n",segtree[].sum);
}
return ;
}

最新文章

  1. XML中输入特殊符号
  2. C++ 基础知识复习(三)
  3. 给Source Insight做个外挂系列之二--将本地代码注入到Source Insight进程
  4. js判断浏览器,包括Edge浏览器
  5. poj1988(并查集)
  6. android 入门-git之上传本地代码到github
  7. LIS(n^2) POJ 2533 Longest Ordered Subsequence
  8. Shtml妙用
  9. 转:ASP.NET MVC + EF 更新的几种方式
  10. HDU 1159 Common Subsequence
  11. PHPcms 摘要
  12. 强大的日志分析工具 -- NSLogger
  13. PAT_1046 划拳
  14. mysql配置文件转载
  15. Python递归函数与斐波那契数列
  16. Oracle ASM数据库故障数据恢复过程
  17. [转]同一台Windows机器中启动多个Memcached服务
  18. 我所理解的Android 启动模式
  19. DataRead和DataSet的异同
  20. 创建虚拟目录失败,必须为服务器名称指定“localhost”

热门文章

  1. IIS之虚拟目录学习
  2. HTML5音频可视化频谱跳动代码
  3. 关于获取WebForm控件的问题
  4. ZBrush中遮罩的概念及使用
  5. selenium基础
  6. poj2406 Power Strings (kmp 求最小循环字串)
  7. java实现多个数字求和_图形化界面
  8. 《你又怎么了我错了行了吧》第九次团队作业:Beta冲刺与验收准备
  9. PatentTips - Increasing turbo mode residency of a processor
  10. ASP.NET-Active Direcotry编程示例