改动的时候因为数据非常小,所以能够直接暴力改动,查询的时候利用线段树即可了。

14337858

option=com_onlinejudge&Itemid=8&page=show_problem&problem=3720" style="font-size:13.1428575515747px; margin:0px; padding:0px; color:rgb(153,0,0); text-decoration:none">12299

RMQ with Shifts Accepted C++ 0.282 2014-10-11 16:02:53

  1. #include<cstdio>
  2. #include<vector>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. #define lson pos<<1
  7. #define rson pos<<1|1
  8. const int maxn = 111111;
  9. const int INF = 111111;
  10. int arr[maxn];
  11. int sz;
  12. struct Node{
  13. int l,r;
  14. int _min;
  15. }node[maxn <<2];
  16. void BuildTree(int L,int R,int pos){
  17. node[pos].l = L; node[pos].r = R;
  18. if(L == R){
  19. scanf("%d",&node[pos]._min);
  20. arr[sz ++] = node[pos]._min;
  21. return ;
  22. }
  23. int m = (L + R) >> 1;
  24. BuildTree(L,m,lson);
  25. BuildTree(m + 1,R,rson);
  26. node[pos]._min = min(node[lson]._min,node[rson]._min);
  27. return;
  28. }
  29. void GetNum(int &l,int &r,char *str){
  30. int L = strlen(str),j;
  31. for(j = 0; j < L; j++){
  32. if(str[j] >= '0' && str[j] <= '9'){
  33. l = l * 10 + (str[j] - '0');
  34. }
  35. else if(l)
  36. break;
  37. }
  38. for(;j < L; j++){
  39. if(str[j] >= '0' && str[j] <= '9'){
  40. r = r * 10 + str[j] - '0';
  41. }
  42. else if(r)
  43. break;
  44. }
  45. return ;
  46. }
  47. int Query(int L,int R,int pos){
  48. if(L <= node[pos].l && node[pos].r <= R)
  49. return node[pos]._min;
  50. int m = (node[pos].l + node[pos].r) >> 1;
  51. int ret = INF;
  52. if(L <= m)
  53. ret = min(ret,Query(L,R,lson));
  54. if(R > m)
  55. ret = min(ret,Query(L,R,rson));
  56. return ret;
  57. }
  58. void UpDate(int aim,int value,int pos){
  59. if(node[pos].l == node[pos].r){
  60. node[pos]._min = value;
  61. return ;
  62. }
  63. int m = (node[pos].l + node[pos].r) >> 1;
  64. if(aim <= m)
  65. UpDate(aim,value,lson);
  66. else
  67. UpDate(aim,value,rson);
  68. node[pos]._min = min(node[lson]._min,node[rson]._min);
  69. return;
  70. }
  71. int main(){
  72. int n,q;
  73. while(scanf("%d%d",&n,&q) != EOF){
  74. sz = 1;
  75. BuildTree(1,n,1);
  76. char str[100];
  77. int array[30];
  78. for(int x = 0; x < q; x++){
  79. scanf("%s",str);
  80. if(str[0] == 'q'){
  81. int l = 0,r = 0;
  82. GetNum(l,r,str);
  83. printf("%d\n",Query(l,r,1));
  84. }
  85. else{
  86. memset(array,0,sizeof(array));
  87. int size = 0, n = strlen(str);
  88. for(int j = 0 ; j < n; j++){
  89. if(str[j] >= '0' && str[j] <= '9'){
  90. array[size] = array[size] * 10 + str[j] - '0';
  91. }
  92. else if(array[size] != 0){
  93. size ++;
  94. }
  95. }
  96. //左移一位
  97. int temp = arr[array[0]];
  98. for(int i = 0; i < size; i++){
  99. int e;
  100. if(i < size - 1){
  101. UpDate(array[i],arr[array[i + 1]],1);
  102. arr[array[i]] = arr[array[i + 1]];
  103. }
  104. else{
  105. UpDate(array[i],temp,1);
  106. arr[array[i]] = temp;
  107. }
  108. }
  109. }
  110. // for(int i = 1 ;i <= n; i++) printf("%d ",arr[i]);
  111. // printf("\n");
  112. }
  113. }
  114. return 0;
  115. }

【UVA】12299-RMQ with Shifts(线段树)的更多相关文章

  1. UVa 12299 RMQ with Shifts(线段树)

    线段树,没了.. ----------------------------------------------------------------------------------------- # ...

  2. UVa 12299 RMQ with Shifts(移位RMQ)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: "Times New ...

  3. HDU 1754 - I Hate It & UVA 12299 - RMQ with Shifts - [单点/区间修改、区间查询线段树]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 Time Limit: 9000/3000 MS (Java/Others) Memory Li ...

  4. RMQ with Shifts(线段树)

    RMQ with Shifts Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u Pra ...

  5. TZOJ 4325 RMQ with Shifts(线段树查询最小,暴力更新)

    描述 In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each que ...

  6. TOJ 4325 RMQ with Shifts / 线段树单点更新

    RMQ with Shifts 时间限制(普通/Java):1000MS/3000MS     运行内存限制:65536KByte 描述 In the traditional RMQ (Range M ...

  7. UVA 12299 RMQ with shifts

    就是线段树的单点修改和区间查询. 然而输入打了一个小时才弄清楚. #include<iostream> #include<cstdio> #include<cstring ...

  8. UVA 12299 RMQ with Shifts(线段树:单点更新)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  9. RMQ问题(线段树+ST算法)

    转载自:http://kmplayer.iteye.com/blog/575725 RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ ...

  10. UVA 11983 Weird Advertisement(线段树求矩形并的面积)

    UVA 11983 题目大意是说给你N个矩形,让你求被覆盖k次以上的点的总个数(x,y<1e9) 首先这个题有一个转化,吧每个矩形的x2,y2+1这样就转化为了求N个矩形被覆盖k次以上的区域的面 ...

随机推荐

  1. android getDecorView()的作用

    decorView是window中的最顶层view,可以从window中通过getDecorView获取到decorView.通过decorView获取到程序显示的区域,包括标题栏,但不包括状态栏.间 ...

  2. bootstrap scaffold框架

    这是一段典型的html typical HTML file: <!DOCTYPE html> <html> <head> <title>Bootstra ...

  3. 不老的新丁 Python何以让人着迷

    Python是一门美丽的语言.它简单易学,跨平台,而且运转良好.达成了许多Java一直求索的技术目标.一言以蔽之就是:其他的语言是与时代同 步,而Python则是未雨绸缪,而且计划得颇为出色.当然,这 ...

  4. 另外一种方式装win2008r2

    装系统有很多方法,但是这种,我很少用. 注意第二个红圈处,是要启动的电话引导盘符.容易选择你的启动U盘,如果是后者,表现出的结果就是引导U盘不能引导,且安装的电脑也会显示ntdl丢失.当然,也可以解决 ...

  5. C# 使用PictureBox控件--点击切换图片

    效果: 1. 2. 代码: private Boolean fals = true; /// <summary> /// 单击事件 /// </summary> /// < ...

  6. Qt实现不同Treewidget之间拖拽

    拖拽是编程中经常要用到的,我这里主要是实习了Treewidget之间直接拖拽Item,按下Ctrl键的话是copy,不按Ctrl则是Move.以下是实现代码 class TreeItemMimeDat ...

  7. Docker学习笔记(4) — 开启Docker远程访问

    默认情况下,Docker守护进程会生成一个socket(/var/run/docker.sock)文件来进程本地进程通信,而不会监听任何端口,因此只能在本地使用docker客户端或者使用Docker ...

  8. [置顶] think in java interview-高级开发人员面试宝典(八)

    面经出了7套,收到许多读者的Email,有许多人说了,这些基础知识是不是为了后面进一步的”通向架构师的道路“做准备的? 对的,你们没有猜错,就是这样的,我一直在酝酿后面的”通向架构师的道路“如何开章. ...

  9. js入门——Dom基础

    DOM=DocumentObject Model,文档对象模型. Dom有三个不同的部分. 1.核心DOM 也是最基础的文档结构的标准模型 2.XMLDOM 针对XML文档的标准模型 3.HTML D ...

  10. DELPHI语法基础学习笔记-Windows 句柄、回调函数、函数重载等(Delphi中很少需要直接使用句柄,因为句柄藏在窗体、 位图及其他Delphi 对象的内部)

    函数重载重载的思想很简单:编译器允许你用同一名字定义多个函数或过程,只要它们所带的参数不同.实际上,编译器是通过检测参数来确定需要调用的例程.下面是从VCL 的数学单元(Math Unit)中摘录的一 ...