题目描述

【问题描述】

在七山七海之外的一个小村庄,白雪公主与N个矮人住在一起,所有时间都花在吃和玩League of Legend游戏。白雪公主决心终结这样的生活,所以为他们举办了体育课。 在每节课开始时,矮人必须按他们的身高站队。假定矮人们有高度1,2,...,N(每个人高度互不相同)。然而,由于不健康的生活方式,矮人的智力有所恶化,所以他们没有能力依照自己的高度排序。
    因此,白雪公主发出以下形式命令帮助他们:
    1 X Y:X和Y位置的矮人互换位置。
    2 A B:询问高度为A,A+1,..., B的矮人(不一定是按照这个顺序)是否已形成了当前队列的连续子序列。
    帮助矮人按照白雪公主的指示行动,并回答她的问题。

【输入格式】

输入的第一行包含两个正整数N和M,分别表示矮人的数量和白雪公主的命令数,2≤N≤200,000,2≤M≤200,000。

第二行包含N个用空格隔开的从1到N的正整数,每个数只出现一次,代表矮人的初始排列。
    接下来的M行包含白雪公主的命令,形式为“1 X Y”(1≤X,Y≤N,X≠Y)或“2 A B”(1≤A≤B≤N)。

【输出格式】

对于每个命令2输出“YES”或“NO”。

solution
解法1:按高度建树,每次找区间最大 最小值
解法2:按位置直接建树,每次找的时候,随便在询问区间找一个数
左右延伸判断   (我没打...)

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<iostream>
  4 using namespace std;
  5 const int N=200006;
  6 void swap(int &x,int &y){x^=y;y^=x;x^=y;}
  7 int maxn(int a,int b){return a>b?a:b;}
  8 int minn(int a,int b){return a<b?a:b;}
  9
 10 int n,m,u;
 11 int v[N],pos[N];
 12
 13 struct son
 14 {
 15     int max,min;
 16 };
 17 son a[N*5];
 18 void pushup(int x)
 19 {
 20     a[x].min=minn(a[x<<1].min,a[x<<1|1].min);
 21     a[x].max=maxn(a[x<<1].max,a[x<<1|1].max);
 22 }
 23 void build(int l,int r,int x)
 24 {
 25     if(l==r)
 26     {
 27         a[x].min=a[x].max=pos[l];
 28         return ;
 29     }
 30     int mid=(l+r)>>1;
 31     build(l,mid,x<<1);
 32     build(mid+1,r,x<<1|1);
 33     pushup(x);
 34 }
 35 void changedian(int pos,int val,int l,int r,int x)
 36 {
 37     if(l==r)
 38     {
 39         a[x].min=a[x].max=val;
 40         return ;
 41     }
 42     int mid=(l+r)>>1;
 43     if(pos<=mid)
 44       changedian(pos,val,l,mid,x<<1);
 45     else
 46       changedian(pos,val,mid+1,r,x<<1|1);
 47     pushup(x);
 48 }
 49 int qqmax(int L,int R,int l,int r,int x)
 50 {
 51     if(L<=l&&r<=R)
 52       return a[x].max;
 53     int mid=(l+r)>>1;
 54     int ans=0;
 55     if(L<=mid)
 56       ans=maxn(ans,qqmax(L,R,l,mid,x<<1));
 57     if(mid<R)
 58       ans=maxn(ans,qqmax(L,R,mid+1,r,x<<1|1));
 59     return ans;
 60 }
 61 int qqmin(int L,int R,int l,int r,int x)
 62 {
 63     if(L<=l&&r<=R)
 64       return a[x].min;
 65     int mid=(l+r)>>1;
 66     int ans=0x7fffffff;
 67     if(L<=mid)
 68       ans=minn(ans,qqmin(L,R,l,mid,x<<1));
 69     if(mid<R)
 70       ans=minn(ans,qqmin(L,R,mid+1,r,x<<1|1));
 71     return ans;
 72 }
 73 int main(){
 74
 75     scanf("%d%d",&n,&m);
 76     for(int i=1;i<=n;++i)
 77     {
 78         scanf("%d",&u);
 79         pos[u]=i;v[i]=u;
 80     }
 81     build(1,n,1);
 82     while(m--)
 83     {
 84         int kk,x,y;
 85         scanf("%d%d%d",&kk,&x,&y);
 86         if(kk==1)
 87         {
 88             changedian(v[x],y,1,n,1);
 89             changedian(v[y],x,1,n,1);
 90             swap(v[x],v[y]);
 91         }
 92         else
 93         {
 94             int maxl=qqmax(x,y,1,n,1);
 95             int minl=qqmin(x,y,1,n,1);
 96             if(maxl-minl==y-x)
 97               printf("YES\n");
 98             else
 99               printf("NO\n");
100         }
101     }
102     //while(1);
103     return 0;
104 }

解法1

转载于:https://www.cnblogs.com/A-LEAF/p/7289794.html

排队 (白雪公主与n个小矮人)相关推荐

  1. 浅析拯救小矮人的 nlogn 算法及其证明

    浅析拯救小矮人的 nlogn 算法及其证明 题型简介: 有 $ n $ 个人,第 $ i $ 个人身高 $ a_i $ 手长 $ b_i $ ,他们为了从一个高为 $ H $ 的洞中出去,决定搭人梯. ...

  2. [TJOI2013]拯救小矮人(反悔贪心证明),「ICPC World Finals 2019」Hobson 的火车(基环树,差分)

    2021-09-07 test [TJOI2013]拯救小矮人 「ICPC World Finals 2019」Hobson 的火车 [TJOI2013]拯救小矮人 luogu4823 考试题目的数据 ...

  3. 洛谷 P4823 [TJOI2013]拯救小矮人

    题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口. 对于每一个小矮人,我们知道他从 ...

  4. 【bzoj3174】[Tjoi2013]拯救小矮人 贪心+dp

    题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人,我们知道他从脚 ...

  5. 使用canvas实现小矮人行走案例

    html代码 <canvas width="500" height="500"></canvas> <script src=&qu ...

  6. 项目管理小故事之小矮人的故事

    小矮人的故事 在古希腊时期的塞浦路斯,曾经有一座城堡里关着一群小矮人.传说他们是因为受到了可怕咒语的诅咒,而被关到这个与世隔绝的地方.他们找不到任何人可以求助,没有粮食,没有水,七个小矮人越来越绝 望 ...

  7. 《讲个故事》七个小矮人 与 七层模型

    某天深夜,标准委员会的工程师们的在酒吧里喝酒划拳,酒过三巡,越玩越嗨,谈到迪士尼电影的时候,他们把电影里7个小矮人的名字写在餐巾纸上,有个人开玩笑说 7 对于网络分层是个好数字.第二天上午在标准化委员 ...

  8. 《讲个故事》七个小矮人与OSI七层模型

    某天深夜,标准委员会的工程师们的在酒吧里喝酒划拳,酒过三巡,越玩越嗨,谈到迪士尼电影的时候,他们把电影里7个小矮人的名字写在餐巾纸上,有个人开玩笑说 7 对于网络分层是个好数字.第二天上午在标准化委员 ...

  9. [codevs 1302] 小矮人(2002年CEOI中欧信息学奥赛)

    描述 矮人们平时有走亲访友的习惯.一天,矮人国要修一条高速公路,矮人们希望他们走亲访友的时候,能够不必穿越高速公路,这样会更安全一些.现在有M个高速公路的修建方案,请你判断这M条高速功能是否能满足矮人 ...

  10. 【BZOJ3174】【codevs25442075】拯救小矮人,DP+贪心

    Time:2016.07.19 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 传送门3 思路: 比较神的DP "贪心确定DP的状态"--reflash 写了 ...

最新文章

  1. 二十一、SPI设备驱动及应用(二)
  2. CNN收购Beme视频分享APP 11个员工也将加入
  3. 设计和实时视图不一样_三室两厅家装设计,如何打造出不一样的感觉?
  4. jpush 极光推送 java
  5. 瑞欧威尔联合创始人兼CEO 李波博士:“工业元宇宙”是为了更好赋能实体经济
  6. 浅谈-LINUX 操作系统启动过程
  7. Android Studio(16)---工程相关解析(各种文件,资源访问)
  8. python视频教程-Python视频教程
  9. mysql+update+@value_记一次MySQL更新语句update的踩坑
  10. idea修改主题和更换背景
  11. 免sdk实现微信/支付宝转账打赏功能
  12. 线程的发展史,调度策略、适用范围、特点,进程与线程的区别、线程的属性、posix线程库
  13. 网优5g前景_5G网络优化工程师的前景和待遇
  14. pandas dataframe获取列名、添加列名、列索引
  15. 公安联勤指挥调度实战应用系统软件平台解决方案
  16. html无边框网格,table没有网格线_html/css_WEB-ITnose
  17. 【面试题】755- 104道 CSS 面试题,助你查漏补缺(上)
  18. 叶问纵横四海战法公式
  19. 【汇正财经】1.9日盘面回顾和行情解析
  20. ec箱式风扇 ec box fan

热门文章

  1. 电路设计_元器件选型总结1
  2. 【AI PC端算法优化】七,RGB和YUV图像颜色空间互转SSE优化
  3. (最简单)uniapp微信小程序生成二维码图片插件
  4. ssh连接docker容器
  5. 人脸识别系统Python源代码的实现
  6. python代码混淆
  7. 光纤OTDR测试是端到端损耗原理
  8. 荣耀盒子无线网连接不上电脑连接服务器,华为荣耀盒子无法连接有线网络怎么解决...
  9. 快速提取年龄,身份证提取年龄的公式
  10. intersystem-M语言基础语法