排队 (白雪公主与n个小矮人)
题目描述
【问题描述】
在七山七海之外的一个小村庄,白雪公主与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”。
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个小矮人)相关推荐
- 浅析拯救小矮人的 nlogn 算法及其证明
浅析拯救小矮人的 nlogn 算法及其证明 题型简介: 有 $ n $ 个人,第 $ i $ 个人身高 $ a_i $ 手长 $ b_i $ ,他们为了从一个高为 $ H $ 的洞中出去,决定搭人梯. ...
- [TJOI2013]拯救小矮人(反悔贪心证明),「ICPC World Finals 2019」Hobson 的火车(基环树,差分)
2021-09-07 test [TJOI2013]拯救小矮人 「ICPC World Finals 2019」Hobson 的火车 [TJOI2013]拯救小矮人 luogu4823 考试题目的数据 ...
- 洛谷 P4823 [TJOI2013]拯救小矮人
题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口. 对于每一个小矮人,我们知道他从 ...
- 【bzoj3174】[Tjoi2013]拯救小矮人 贪心+dp
题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人,我们知道他从脚 ...
- 使用canvas实现小矮人行走案例
html代码 <canvas width="500" height="500"></canvas> <script src=&qu ...
- 项目管理小故事之小矮人的故事
小矮人的故事 在古希腊时期的塞浦路斯,曾经有一座城堡里关着一群小矮人.传说他们是因为受到了可怕咒语的诅咒,而被关到这个与世隔绝的地方.他们找不到任何人可以求助,没有粮食,没有水,七个小矮人越来越绝 望 ...
- 《讲个故事》七个小矮人 与 七层模型
某天深夜,标准委员会的工程师们的在酒吧里喝酒划拳,酒过三巡,越玩越嗨,谈到迪士尼电影的时候,他们把电影里7个小矮人的名字写在餐巾纸上,有个人开玩笑说 7 对于网络分层是个好数字.第二天上午在标准化委员 ...
- 《讲个故事》七个小矮人与OSI七层模型
某天深夜,标准委员会的工程师们的在酒吧里喝酒划拳,酒过三巡,越玩越嗨,谈到迪士尼电影的时候,他们把电影里7个小矮人的名字写在餐巾纸上,有个人开玩笑说 7 对于网络分层是个好数字.第二天上午在标准化委员 ...
- [codevs 1302] 小矮人(2002年CEOI中欧信息学奥赛)
描述 矮人们平时有走亲访友的习惯.一天,矮人国要修一条高速公路,矮人们希望他们走亲访友的时候,能够不必穿越高速公路,这样会更安全一些.现在有M个高速公路的修建方案,请你判断这M条高速功能是否能满足矮人 ...
- 【BZOJ3174】【codevs25442075】拯救小矮人,DP+贪心
Time:2016.07.19 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 传送门3 思路: 比较神的DP "贪心确定DP的状态"--reflash 写了 ...
最新文章
- 二十一、SPI设备驱动及应用(二)
- CNN收购Beme视频分享APP 11个员工也将加入
- 设计和实时视图不一样_三室两厅家装设计,如何打造出不一样的感觉?
- jpush 极光推送 java
- 瑞欧威尔联合创始人兼CEO 李波博士:“工业元宇宙”是为了更好赋能实体经济
- 浅谈-LINUX 操作系统启动过程
- Android Studio(16)---工程相关解析(各种文件,资源访问)
- python视频教程-Python视频教程
- mysql+update+@value_记一次MySQL更新语句update的踩坑
- idea修改主题和更换背景
- 免sdk实现微信/支付宝转账打赏功能
- 线程的发展史,调度策略、适用范围、特点,进程与线程的区别、线程的属性、posix线程库
- 网优5g前景_5G网络优化工程师的前景和待遇
- pandas dataframe获取列名、添加列名、列索引
- 公安联勤指挥调度实战应用系统软件平台解决方案
- html无边框网格,table没有网格线_html/css_WEB-ITnose
- 【面试题】755- 104道 CSS 面试题,助你查漏补缺(上)
- 叶问纵横四海战法公式
- 【汇正财经】1.9日盘面回顾和行情解析
- ec箱式风扇 ec box fan