HDU5239 Doom
2016-05-01 14:32
337 查看
最后的结果忘记取模 WA到要哭。。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5239
这个是典型的线段树区间替换题目。
注意的是mod太大,会爆unsigned long long,需要用模乘法。
还有就是一个数取mod到一定次数会开始重复。(当A*A%mod==A)时就开始重复
用个数组v去判断。如果开始重复就v[...]=1;
然后如果两个子节点都开始重复不变了,那么父节点也是会开始重复不变。
AC代码如下:
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#define lson o<<1,l,m#define rson (o<<1)|1,m+1,r#define maxn 1000005#define ll unsigned long long#define U unsignedconst ll mod=9223372034707292160Ull;using namespace std;ll sumv[maxn<<1],a[maxn];int v[maxn];ll multi_mod(ll a,ll b)//模乘法{ll ans=0;while(b){if(b&1) ans=ans+a;if(ans>=mod) ans-=mod;a<<=1;if(a>=mod) a-=mod;b>>=1;}return ans;}void build(int o,int l,int r){v[o]=0;if(l==r)return;int m=(r+l)>>1;build(lson);build(rson);}ll update(int o,int l,int r,int ql,int qr){if(v[o]&&ql<=l&&r<=qr)//区间覆盖且该区间不变了则返回值{return sumv[o];}ll ans=0;if(l==r)//叶节点要更改值{ans=a[l];a[l]=multi_mod(a[l],a[l]);if(a[l]==ans)//判断叶节点的值是否开始重复不变了{sumv[o]=ans;v[o]=1;}return ans;}int m=(l+r)>>1;if(ql<=m)ans+=update(lson,ql,qr);if(qr>m)ans+=update(rson,ql,qr);if(ans>=mod)ans-=mod;if(v[o<<1]&&v[(o<<1)|1])//左右区间不变 父节点也不变{sumv[o]=sumv[o<<1]+sumv[(o<<1)|1];if(sumv[o]>=mod)sumv[o]-=mod;v[o]=1;}return ans;}int main(){int n,m,T;scanf("%d",&T);for(int t=1;t<=T;t++){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%llu",&a[i]);build(1,1,n);ll ans=0;printf("Case #%d:\n",t);while(m--){int a,b;scanf("%d%d",&a,&b);ans+=update(1 , 1 , n , a , b );if(ans>=mod) ans-=mod;printf("%llu\n",ans);}}return 0;}
相关文章推荐
- 【LeetCode】Number of 1 Bits 解题报告
- 博客第一天《喜欢劳动的人命运都不会差》
- 从自我学习到深层网络
- Analog linked list quiz
- 【Linux C王者归来】【第十四章】【进程间的通信】
- 2016 UESTC Training for Data Structures J - 郭大侠与Rabi-Ribi CDOJ 1334 优先队列
- Linux内核分析总结
- HDU 5676 ztr loves lucky numbers
- ReactNative 入门与探索
- Hive 和 Hadoop 关系
- codeforces 660C Hard Process
- hdu 5678 ztr loves trees(求子树第k大 线段树套主席树)
- UVA 12544 - Beehives O(nm) 无向图最小环
- IOS安全学记资料汇总
- linux小记:查看dd进度
- Bad version number in .class file的解决方法
- 2016 UESTC Training for Data Structures I - 郭大侠与线上游戏 CDOJ 1339 pb_ds黑科技
- Vawio Sequence
- Android开发:Handler异步通信机制全面解析(包含Looper、Message Queue
- 解决自定义leftBarButtonItem返回手势失效的方法