思路:原来以为自己已经完全理解了线段树,现在发现其实还差一些火候,做题的时候太拘泥于格式,思路不是很能放开。
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. #define MAXN 50010
  6. using namespace std;
  7. int n,m,top;
  8. int stack[MAXN],vis[MAXN];
  9. struct nond{
  10. int l,r,len,ren,mid;
  11. }tree[MAXN*];
  12. void build(int now,int l,int r){
  13. tree[now].l=l;tree[now].r=r;
  14. tree[now].len=tree[now].r-tree[now].l+;
  15. tree[now].ren=tree[now].mid=tree[now].len;
  16. if(tree[now].l==tree[now].r) return ;
  17. int mid=(tree[now].l+tree[now].r)/;
  18. build(now*,l,mid);
  19. build(now*+,mid+,r);
  20. }
  21. void change(int now,int x,int pos){
  22. if(tree[now].l==tree[now].r){
  23. tree[now].len=tree[now].ren=tree[now].mid=pos;
  24. return ;
  25. }
  26. int mid=(tree[now].l+tree[now].r)/;
  27. if(x<=mid) change(now*,x,pos);
  28. else if(x>mid) change(now*+,x,pos);
  29. tree[now].len=tree[now*].len;
  30. tree[now].ren=tree[now*+].ren;
  31. tree[now].mid=max(tree[now*].mid,tree[now*+].mid);
  32. tree[now].mid=max(tree[now].mid,tree[now*].ren+tree[now*+].len);
  33. if(tree[now*].len==tree[now*].r-tree[now*].l+)
  34. tree[now].len=tree[now*].len+tree[now*+].len;
  35. if(tree[now*+].ren==tree[now*+].r-tree[now*+].l+)
  36. tree[now].ren=tree[now*+].ren+tree[now*].ren;
  37. }
  38. int query(int now,int k){
  39. if(tree[now].l==tree[now].r||tree[now].mid==||tree[now].mid==tree[now].r-tree[now].l+)
  40. return tree[now].mid;
  41. int mid=(tree[now].l+tree[now].r)/;
  42. if(k<=mid){
  43. if(k>=tree[now*].r-tree[now*].ren+)
  44. return query(now*,k)+query(now*+,mid+);
  45. else return query(now*,k);
  46. }
  47. else{
  48. if(k<=tree[now*+].l+tree[now*+].len-)
  49. return query(now*+,k)+query(now*,mid);
  50. else return query(now*+,k);
  51. }
  52. }
  53. int main(){
  54. while(scanf("%d%d",&n,&m)!=EOF){
  55. build(,,n);top=;
  56. for(int i=;i<=m;i++){
  57. char c;int x;
  58. scanf("\n%c",&c);
  59. if(c=='D'){
  60. scanf("%d",&x);
  61. stack[++top]=x;change(,x,);
  62. }
  63. else if(c=='Q'){
  64. scanf("%d",&x);
  65. printf("%d\n",query(,x));
  66. }
  67. else change(,stack[top--],);
  68. }
  69. }
  70. }
  71. /*
  72. 7 9
  73. D 3
  74. D 6
  75. D 5
  76. Q 4
  77. Q 5
  78. R
  79. Q 4
  80. R
  81. Q 4
  82. */

I - Tunnel Warfare的更多相关文章

  1. hdu1540 Tunnel Warfare

    Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  2. [POJ2892]Tunnel Warfare

    [POJ2892]Tunnel Warfare 试题描述 During the War of Resistance Against Japan, tunnel warfare was carried ...

  3. HDU 1540 Tunnel Warfare 平衡树 / 线段树:单点更新,区间合并

    Tunnel Warfare                                  Time Limit: 4000/2000 MS (Java/Others)    Memory Lim ...

  4. POJ 2892 Tunnel Warfare(线段树单点更新区间合并)

    Tunnel Warfare Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 7876   Accepted: 3259 D ...

  5. HDU 1540 Tunnel Warfare 线段树区间合并

    Tunnel Warfare 题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少 思路:一个节点的最大连续区间由(左儿子的最大的连续区间,右儿子的最大连续区 ...

  6. hdu 1540 Tunnel Warfare (区间线段树(模板))

    http://acm.hdu.edu.cn/showproblem.php?pid=1540 Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) ...

  7. poj 2892 Tunnel Warfare(线段树)

    Tunnel Warfare Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 7499   Accepted: 3096 D ...

  8. HDU-1540          Tunnel Warfare

    Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  9. hdu 1540 Tunnel Warfare(线段树区间统计)

    Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  10. HDU 1540 Tunnel Warfare(最长连续区间 基础)

    校赛,还有什么途径可以申请加入ACM校队?  Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/ ...

随机推荐

  1. 简述RTMPDump与编译移植

    RTMPDump主页 ,RTMPDump库主要包含三部分: 1.一个基本的客户端程序 2.两个服务器程序(rtmpsrv.rtmpsuck) 3.一个支持rtmp协议的库—librtmp 下载RTMP ...

  2. iOS版本、iPhone版本、Xcode版本比对

    iOS版本 iPhone版本 Xcode版本 其他 2003年 Xcode1.0 2005年4月29日 Xcode2.0 2007年1月9日 iPhone OS(iOS1): 虚拟键盘.谷歌地图 第一 ...

  3. 快速排序及三向切分快排——java实现

    快速排序也是一种分治算法.主要思想是选取一个切分点,将大于切分点的元素都放置到数组右侧,小于切分点的元素都放置到数组左侧:然后递归,再对切分点左侧和右侧分别排序. 归并排序时递归在前,归并在后,快速排 ...

  4. ecshop数据库说明

    数据库 ecshop 表的结构 ecs_account_log 字段 类型 空 默认 含义 log_id mediumint(8) 否 账户记录表 user_id mediumint(8) 否 用户编 ...

  5. protobuf 编译 java js文件详解

    首先下载protobuf.exe 下载地址:https://download.csdn.net/download/qq_34756156/10220137 MessageBody.proto synt ...

  6. sql学习--update

    两种修改形式 第一种:静态插入 ,notes='began career selling ...balabala' where jc='johnny ca' 第二种: --注意别名和on后边的表连接不 ...

  7. NSLayoutConstraints加动画来改变约束

    // // ViewController.m // NSLayoutAnimationDemo // // Created by ebaotong on 15/7/22. // Copyright ( ...

  8. Android 使用SQLite存储以及读取Drawable对象

    在进行Android开发过程中,我们经常会接触到Drawable对象,那么,若要使用数据库来进行存储及读取,该如何实现? 一.存储 //第一步,将Drawable对象转化为Bitmap对象 Bitma ...

  9. MainActivity 多个Fragment 内存被回收

    0. 前言 应用首页采用Activity +Tab 模式,多个Fragment 替换显示隐藏 FragmentTransaction transaction = getSupportFragmentM ...

  10. phpstorm 使用

    常用快捷 ctrl + / 单行注释 Alt+1 隐藏左侧任务栏 设置 1:control+shift+A功能可以搜索对应功能,把mouse:Change font size(Zoom) ...的按钮 ...