打表,发现规律是存在一定次数(较小)后,会出现a=(a*a)%p。可以明显地发现本题与线段树有关。设置标记flag,记录本段内的数是否均已a=a*a%p。若是,则不需更新,否则更新有叶子结点,再pushup。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #define LL unsigned long long
  6. using namespace std;
  7. const LL p=9223372034707292160uLL;
  8. const int N=100050;
  9. int n;
  10. LL seg[N<<2],s;
  11. bool flag[N<<2];
  12.  
  13. void build(int rt,int l,int r){
  14. flag[rt]=false;
  15. if(l==r){
  16. scanf("%llu",&seg[rt]);
  17. // cout<<l<<"="<<seg[rt]<<endl;
  18. return ;
  19. }
  20. int m=(l+r)>>1;
  21. build(rt<<1,l,m);
  22. build(rt<<1|1,m+1,r);
  23. seg[rt]=(seg[rt<<1]+seg[rt<<1|1])%p;
  24. }
  25.  
  26. LL mul(LL a,LL b){
  27. LL res=0;
  28. while(b){
  29. if(b&1) res=(res+a)%p;
  30. b>>=1;
  31. a=(a+a)%p;
  32. }
  33. return res;
  34. }
  35.  
  36. void update(int rt,int l,int r,int L,int R){
  37. if(flag[rt]&&l<=L&&R<=r){
  38. s=(s+seg[rt])%p;
  39. return ;
  40. }
  41. if(L==R){
  42. s=(s+seg[rt])%p;
  43. LL tmp=mul(seg[rt],seg[rt]);
  44. if(seg[rt]==tmp){
  45. flag[rt]=true;
  46. }
  47. seg[rt]=tmp;
  48. return ;
  49. }
  50. int m=(L+R)>>1;
  51. if(r<=m){
  52. update(rt<<1,l,r,L,m);
  53. }
  54. else if(l>=m+1) update(rt<<1|1,l,r,m+1,R);
  55. else{
  56. update(rt<<1,l,r,L,m);
  57. update(rt<<1|1,l,r,m+1,R);
  58. }
  59. flag[rt]=flag[rt<<1]&flag[rt<<1|1];
  60. seg[rt]=(seg[rt<<1]+seg[rt<<1|1])%p;
  61. }
  62.  
  63. int main(){
  64. int T,icase=0,k,l,r;
  65. scanf("%d",&T);
  66. while(T--){
  67. s=0;
  68. scanf("%d%d",&n,&k);
  69. build(1,1,n);
  70. printf("Case #%d:\n",++icase);
  71. for(int i=1;i<=k;i++){
  72. scanf("%d%d",&l,&r);
  73. update(1,l,r,1,n);
  74. printf("%llu\n",s);
  75. }
  76. }
  77. return 0;
  78. }

  

HDU 5239 上海大都会 D题(线段树+数论)的更多相关文章

  1. HDU 5242 上海大都会 G题

    这道题其实是求K条最长的不重叠的链.贪心算法+DFS即可求.深度优先搜索时,返回当前子树的最长链,使用优先队列保存其他孩子结点的最长链,即可.求结果时只需从优先队列中取前K个值的和.这相当于暴力删除每 ...

  2. HDU 5241 上海大都会 F题

    留意到,每一种语言的情况其实是独立的,也就是说,每一种语言的集合的包含的情况都是符合要求的.一种语言在图上可以有32种情况(由数据2知),所以,总的数就是32^n import java.util.* ...

  3. HDU 5245 上海大都会 J题 (概率期望)

    这道题的概率可以单独考虑每个格子对期望的贡献值.因为其实每个格子是否被选都可以认为是独立的,单独一个格子贡献的期望为1*(该格子K次被选的概率),所以答案其实就是每个格子K次被选中的概率之和. #in ...

  4. HDU 3074.Multiply game-区间乘法-线段树(单点更新、区间查询),上推标记取模

    Multiply game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  5. HDU 1394 Minimum Inversion Number(线段树求最小逆序数对)

    HDU 1394 Minimum Inversion Number(线段树求最小逆序数对) ACM 题目地址:HDU 1394 Minimum Inversion Number 题意:  给一个序列由 ...

  6. hdu 5274 Dylans loves tree(LCA + 线段树)

    Dylans loves tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  7. 「CQOI2006」简单题 线段树

    「CQOI2006」简单题 线段树 水.区间修改,单点查询.用线段树维护区间\([L,R]\)内的所有\(1\)的个数,懒标记表示为当前区间是否需要反转(相对于区间当前状态),下方标记时懒标记取反即可 ...

  8. hdu 5475 模拟计算器乘除 (2015上海网赛H题 线段树)

    给出有多少次操作 和MOD 初始值为1 操作1 y 表示乘上y操作2 y 表示除以第 y次操作乘的那个数 线段树的叶子结点i 表示 第i次操作乘的数 将1替换成y遇到操作2 就把第i个结点的值 替换成 ...

  9. hdu 1556:Color the ball(线段树,区间更新,经典题)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

随机推荐

  1. 前端性能优化---减少http请求数量和减少请求资源的大小

    减少http请求数量:就是资源的合并 减少http请求大小:就是资源的压缩   一.资源合并的原理:   资源不合并的缺点: 1.文件和文件之间有插入请求----请求a.js,b.js,c.js(三行 ...

  2. $CF1141B Maximal Continuous Rest$

    告诉你一天n件事情 a[i]为1是休息 a[i]为2是工作 求最长连续的休息时间(即最长的1 可以作为环状来求.(即环状最长的1 这题就可以用前缀和贪心等什么操作.. 然后用\(ans1ans2\)瞎 ...

  3. JavaScript--关闭窗口(window.close)

    close()关闭窗口 用法: window.close(); //关闭本窗口 或 <窗口对象>.close(); //关闭指定的窗口 例如:关闭新建的窗口. <script typ ...

  4. Django总结四

    0.ORM操作 1.必会的13条 返回对象列表的 all filter exclude order_by reverse distinct 特殊的对象列表 values values_list 返回对 ...

  5. C#最实用的快捷键

    Ctrl+J(Alt+→):智能提示. Ctrl+X:删除整行. Shift+Alt+Enter:全屏切换 F12:跳转到定义. Ctrl+-.Ctrl+Shift+-:上一步.下一步(仅限于使用过上 ...

  6. SVN异常处理(五)-状态小图标不见了

    1.发现问题 装了Win10,再装了Office2016等一些最新软件后,发现SVN状态小图标竟然就不见了 2.分析问题 在Window系统中,当UAC启动时,有些应用程序的图标上会显示一个盾牌,像这 ...

  7. Product Device Lot

    Product是指产品: 这个Product可以在不同的设备类型上生产, 同一类型的设备也可能硬件有差异,所以会有相对应的Device(Recipe): 同一Product(或同一Device)由于数 ...

  8. webstorm进行VisualSVN配置及上传项目到项目库

    以前建站一直都是自己一个人,最近要做一个比较大的网站,寻思着利用svn在整个开发过程中会比较快,于是摸索着配置了一下. 首先,下载VisualSVN这个软件,官网链接 https://www.visu ...

  9. js 翻页

    翻页功能是js很基础的一个算法,且用得很多,所以必须掌握此项技能. 我们要想清楚在实现翻页的过程中需要哪几个步骤: 1.我们首先需要的变量有哪些,必须的有一个存放当前页码的变量nowPage.一个存放 ...

  10. postgres外部表如何修改源码适配pg升级

    postgres中外部表的应用如下: 但是许多在github上的fdw开源代码都是基于9.3以及9.4版本开发,原作者没有随着pg的版本升级而将外部表扩展升级,那只能靠自己去手动修改源码来让这些扩展能 ...