题意:给定n和m。

给定一个长度为n的序列,m次操作。

接下来m次操作,每行第一个数若为1,则增序排列,若为2则降序排列,第二个数是排列的范围,即从第一个数排序到第某个数。

思路:

首先,对于其中范围最大的操作和其右方范围次大的操作之间有一个区间,我们可以知道这个区间的序列是按照范围最大的操作的序列进行的,因为右边不会有新的操作,左边的操作会被这次范围最大的操作取代。同理,向右边不断寻找最大的操作,然后能确定和其右边次大的操作之间的差值的区间的序列的顺序。

如果是增序,那么在确定差值区间的每个元素的时候最后的一定是整个里边最大的,反之则是最小的。我们用两棵平衡树来确定最大的和最小的,然后同时更新这两棵平衡数的数据。

坑点:

这里平衡树使用stl里边的multiset,因为难免序列里边有重复的数。但是multiset的erase函数如果直接把查找到数字当作参数的话会全部删除所有的相同的数。

#include<bits/stdc++.h>
using namespace std;
int jilu[];
struct st{
int id,typ,fanwei;
};
st chuli[];
bool cmp(st a,st b){
if(a.fanwei!=b.fanwei){
return a.fanwei>b.fanwei;
}
return a.id>b.id;
}
multiset<int>da;
multiset<int>xiao;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&jilu[i]);
}
for(int i=;i<=m;i++){
scanf("%d%d",&chuli[i].typ,&chuli[i].fanwei);
chuli[i].id=i;
}
sort(chuli+,chuli++m,cmp);
/*for(int i=1;i<=m;i++){
printf("%d %d\n",chuli[i].id,chuli[i].fanwei);
}
return 0;*/
st tmp=chuli[];
for(int i=;i<=tmp.fanwei;i++){
da.insert(-jilu[i]);
xiao.insert(jilu[i]);
}
for(int i=;i<=m;i++){
if(chuli[i].id<tmp.id){
continue;
}
else{
if(tmp.typ==){
for(int j=tmp.fanwei;j>chuli[i].fanwei;j--){
int ttt=*da.begin();
da.erase(da.find(ttt));
xiao.erase(xiao.find(-ttt));
jilu[j]=-ttt;
}
}
else{
for(int j=tmp.fanwei;j>chuli[i].fanwei;j--){
int ttt=*xiao.begin();
da.erase(da.find(-ttt));
xiao.erase(xiao.find(ttt));
jilu[j]=ttt;
}
}
tmp=chuli[i];
if(tmp.id==m){
break;
}
}
}
if(tmp.typ==){
for(int j=tmp.fanwei;j>;j--){
int ttt=*da.begin();
da.erase(da.find(ttt));
xiao.erase(xiao.find(-ttt));
jilu[j]=-ttt;
}
}
else{
for(int j=tmp.fanwei;j>;j--){
int ttt=*xiao.begin();
da.erase(da.find(-ttt));
xiao.erase(xiao.find(ttt));
jilu[j]=ttt;
}
}
for(int i=;i<=n;i++){
printf("%d",jilu[i]);
if(i!=n)
printf(" ");
}
}

最新文章

  1. 关于checkbox全选与反选的问题
  2. org.springframework.web.servlet.view.InternalResourceViewResolver
  3. java.lang.NoSuchMethodError: main Exception in thread &quot;main&quot;
  4. C# 二叉堆
  5. sqlite3安装
  6. nginx编译配置
  7. Java Enum使用演示样品枚举
  8. iOS下uiview和uiscrollview设置背景图片的源码
  9. 手机自动化测试:Appium源码分析之跟踪代码分析九
  10. Vector 特性
  11. php curl 跨域情趣
  12. mybatis入门--配置
  13. 素数问题练习_HDOJ1262
  14. 在macOS下正确配置 VS Code 使用 virtualenv 里的 python 环境参数
  15. Android学习之路(转载)
  16. Android中3种全屏方法及3种去掉标题栏的方法
  17. itext汇总 生成pdf
  18. c#格式化字符
  19. 2.airflow参数简介
  20. SQL Server 事务复制爬坑记

热门文章

  1. nginx https http 共用
  2. Oracle中replace函数的使用
  3. java通过ftp和sftp上传war包上传到Linux服务器实现自动重启tomcat的脚本代码
  4. jquery中的each方法,$.each \ this.each \ $.fn.each
  5. DIV中的垂直居中
  6. div的打开与关闭js
  7. 【Hadoop需要的Jar包】Hadoop编程-pom.xml文件
  8. android学习笔记九——RatingBar
  9. phpize的安装
  10. 求助:为什么我用360浏览器和UC浏览器打不开JAVA中的index.html文件? 一打开就显示浏览器首界页