题目传送门

评分:省选/NOI-,难度:普及+/提高

这题真的和RMQ没有半点关系,只需要一个裸的线段树,连pushdown都不需要,只需要两种操作:区间修改和区间求最小值,在回溯时加上标记即可,唯一有点思维含量的是对环的处理,如果左端点大于了右端点,就维护(l,n)(1,r),否则正常维护即可,不知道线段树怎么打的可以看我的博客:线段树

下面给出参考代码:

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. using namespace std;
  5. struct node
  6. {
  7. long long l,r,w,tag;
  8. }tree[];
  9. long long n,m,q,x,y,k,ans;
  10. void build(long long l,long long r,long long k)
  11. {
  12. tree[k].l=l;tree[k].r=r;
  13. if(l==r)
  14. {
  15. scanf("%lld",&tree[k].w);
  16. return;
  17. }
  18. long long mid=(l+r)/;
  19. build(l,mid,k*);
  20. build(mid+,r,k*+);
  21. tree[k].w=min(tree[k*].w,tree[k*+].w);
  22. }
  23. void add(long long k,long long w,long long ll,long long rr)
  24. {
  25. long long l=tree[k].l,r=tree[k].r;
  26. if(l>=ll&&r<=rr)
  27. {
  28. tree[k].tag+=w;
  29. return;
  30. }
  31. //cout<<k<<" "<<l<<" "<<r<<endl;
  32. long long mid=(l+r)/;
  33. //cout<<x<<" "<<y<<endl;
  34. if(ll<=mid)add(k*,w,ll,rr);
  35. if(rr>mid)add(k*+,w,ll,rr);
  36. tree[k].w=min(tree[k*].w+tree[k*].tag,tree[k*+].w+tree[k*+].tag);
  37. return;
  38. }
  39. long long query(long long k,long long ll,long long rr)
  40. {
  41. if(tree[k].l>=ll&&tree[k].r<=rr)
  42. {
  43. return tree[k].w+tree[k].tag;
  44. }
  45. if(tree[k].l>rr||tree[k].r<ll)
  46. {
  47. return ;
  48. }
  49. long long mid=(tree[k].l+tree[k].r)/,lc,rc;
  50. lc=query(k*,ll,rr);
  51. rc=query(k*+,ll,rr);
  52. return min(lc,rc)+tree[k].tag;
  53. }
  54. int main()
  55. {
  56. cin>>n;
  57. build(,n,);
  58. cin>>m;
  59. for(long long i=;i<=m;i++)
  60. {
  61. cin>>x>>y;
  62. x++;y++;
  63. char c=getchar();
  64. if(c=='\n')
  65. {
  66. //4 1
  67. ans=;
  68. if(x>y)cout<<min(query(,x,n),query(,,y));
  69. else cout<<query(,x,y);
  70. cout<<endl;
  71. }
  72. else
  73. {
  74. cin>>q;
  75. if(x>y)add(,q,x,n),add(,q,,y);
  76. else add(,q,x,y);
  77. }
  78. }
  79. return ;
  80. }

[CodeForces 52C]Circular RMQ的更多相关文章

  1. CodeForces 52C Circular RMQ(间隔周期段树,间隔更新,间隔总和)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://codeforces.com/problemset/problem/52/C You are g ...

  2. CodeForces 52C Circular RMQ (线段树)

    线段树区间更新维护最小值...记得下放标记... 如果线段树上的一个完整区间被修改,那么最小值和最大值增加相应的值后不变, 会改变是因为一部分改变而另外一部分没有改变所以维护一下就好. 询问的时候也要 ...

  3. codeforces 803G Periodic RMQ Problem

    codeforces 803G Periodic RMQ Problem 题意 长度为\(1e5\)的数组复制\(1e4\)次,对新的数组进行区间覆盖和区间最小值查询两种操作,操作次数\(1e5\). ...

  4. 「CF52C」Circular RMQ

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description You are given circular array \(a_0, a_ ...

  5. CF#52 C Circular RMQ (线段树区间更新)

    Description You are given circular array a0, a1, ..., an - 1. There are two types of operations with ...

  6. Codeforces 803G Periodic RMQ Problem 线段树

    Periodic RMQ Problem 动态开点线段树直接搞, 我把它分成两部分, 一部分是原来树上的, 一部分是后来染上去的,两个部分取最小值. 感觉有点难写.. #include<bits ...

  7. 【CF52C】Circular RMQ(线段树区间加减,区间最值)

    给定一个循环数组a0, a1, a2, …, an-1,现在对他们有两个操作: Inc(le, ri, v):表示区间[le, ri]范围的数值增加v Rmq(le, ri):表示询问区间[le, r ...

  8. codeforces 873E(枚举+rmq)

    题意 有n(n<=3000)个人参与acm比赛,每个人都有一个解题数,现在要决定拿金牌的人数cnt1,拿银牌的人数cnt2,拿铜牌的人数cnt3,各自对应一个解题数区间[d1,c1],[d2,c ...

  9. Codeforces 803G Periodic RMQ Problem ST表+动态开节点线段树

    思路: (我也不知道这是不是正解) ST表预处理出来原数列的两点之间的min 再搞一个动态开节点线段树 节点记录ans 和标记 lazy=-1 当前节点的ans可用  lazy=0 没被覆盖过 els ...

随机推荐

  1. shell 搜索指定目录下所有 jar 文件生成csv文件

    虽说比较简单,但希望分享给大家.按需求改成想找的:例如txt,xls 等. 脚本名 扫描的路径 文件名 testFind.sh /  testFind.txt (如果未配置环境变量  ./testFi ...

  2. 使用python3搭建Linux-mariadb主从架构

    环境准备两台: 192.168.193.90 master 192.168.193.91 slave 需要Linux装python环境: https://www.cnblogs.com/kingzhe ...

  3. tuple&dict

    # n = (12,[23,56]) # n[1][0] = 89 #元组不可修改,但元组内部的列表内部的元素可以修改,但内部的列表的内部也是元组,则他不可修改 # print(n) # n = (1 ...

  4. [POI2008]Sta(树形dp)

    [POI2008]Sta Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面 ...

  5. debian系列systemd 配置nodejs服务

    1  新建service配置文件 vi /etc/systemd/system/node.service [Unit] Description=My super nodejs app [Service ...

  6. node.js从入门到放弃《什么是node.js》

    1.什么是node.js Node.js是一个后端的Javascript运行环境(支持的系统包括*nux.Windows),这意味着你可以编写系统级或者服务器端的Javascript代码. Node. ...

  7. 微信 ios img图片不显示问题

    使用div标签,将图片作为background .

  8. CF527E Data Center Drama

    链接CF527E Data Center Drama 题目大意:给你一个无向图,要求加最少的边,然后给这些无向图的边定向,使得每一个点的出入度都是偶数. \(n<=10^5,n\leq 2*10 ...

  9. JavaScript 工作原理之十-使用 MutationObserver 监测 DOM 变化

    原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第十章. 网络 ...

  10. centos7标准版命令界面和图形界面相互切换

    1.root登陆终端 2.输入命令 vi /etc/inittab ,查看两种界面的启动模式: 3.退出vi模式,,输入命令systemctl get-default 查看当前系统启动模式:我的是命令 ...