hihocoder 1116 : 计算(线段树 区间合并)
来源:互联网 发布:数据冗余的坏道 编辑:程序博客网 时间:2024/05/21 10:45
l表示每个前缀之积的和
r表示每个后缀之积的和
m表示区间内所有数字之积
查询的结果就是整个区间的结果。
#include <bits/stdc++.h>using namespace std;typedef long long LL;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const int MAXN = 1e5+10;const int mod = 10007;int sum[MAXN<<2];int m[MAXN<<2];int l[MAXN<<2];int r[MAXN<<2];void pushUp(int rt){ sum[rt] = (sum[rt<<1] + sum[rt<<1|1] + r[rt<<1]*l[rt<<1|1])%mod; l[rt] = (l[rt<<1] + l[rt<<1|1]*m[rt<<1])%mod; r[rt] = (r[rt<<1|1] + r[rt<<1]*m[rt<<1|1])%mod; m[rt] = (m[rt<<1]*m[rt<<1|1])%mod;}void update(int l, int r, int rt, int pos, int val){ if(l == r) { sum[rt] = ::l[rt] = ::r[rt] = m[rt] = val%mod; return; } int mid = (l+r) >> 1; if(pos > mid) update(rson, pos, val); else update(lson, pos, val); pushUp(rt);}int main(){ int n,q,x,val; while(scanf("%d %d",&n,&q) != EOF) { memset(sum,0,sizeof(sum)); memset(m,0,sizeof(m)); memset(l,0,sizeof(l)); memset(r,0,sizeof(r)); while(q--) { scanf("%d %d",&x,&val); update(1,n,1,x,val); printf("%d\n",sum[1]); } } return 0;}
阅读全文
0 0
- hihoCoder 1116 计算 线段树 + 区间合并
- hihoCoder#1116-计算[线段树+合并区间]
- hihoCoder - 1116 - 计算 (线段树区间合并)
- hihocoder-1116 : 计算 (线段树区间合并)
- hihocoder 1116 : 计算(线段树 区间合并)
- hihoCoder - 1116 - 计算 (线段树)
- hihocoder#1116 : 计算(线段树)
- 线段树 (区间合并)
- HihoCoder 1078(线段树,区间覆盖 询问区间和)
- 线段树 区间合并
- 线段树 区间合并
- 线段树 区间合并
- 线段树 区间合并
- 线段树-区间合并
- poj3667 线段树(区间合并)
- hdu3308(线段树,区间合并)
- poj3667(线段树,区间合并)
- poj3667 Hotel (线段树区间合并)
- jeesite 框架搭建与配置(笔记)
- 提示自身技术最重要,扩展自己的知识面一样重要
- pulltorefreshlistview 加载更多后返回顶部
- 配置opencv的过程中出现的问题总结
- linux下gdb的调试使用
- hihocoder 1116 : 计算(线段树 区间合并)
- webstorm 2017 激活破解
- bzoj 1598(SPFA+A*)
- Oracle针对EMP表的练习题(很有用,值得收藏)
- yii2 DatePicker时间选择器的使用(例:选择到年)
- [状压DP] HDU 5823 Color II
- LightOJ
- oracle数据库emp表 及其关联的表
- myeclipse 搭建最简单的Rest 服务