Codeforces 631C
题意:给定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(" ");
}
}
Codeforces 631C的更多相关文章
- Codeforces 631C. Report 模拟
C. Report time limit per test:2 seconds memory limit per test:256 megabytes input:standard input out ...
- codeforces 631C. Report
题目链接 按题目给出的r, 维护一个递减的数列,然后在末尾补一个0. 比如样例给出的 4 21 2 4 32 31 2 递减的数列就是3 2 0, 操作的时候, 先变[3, 2), 然后变[2, 0) ...
- CodeForces 631C Print Check
排序+构造+预处理 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm ...
- CodeForces - 631C (截取法)
C. Report time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...
- Report CodeForces - 631C (栈)
题目链接 题目大意:给定序列, 给定若干操作, 每次操作将$[1,r]$元素升序或降序排列, 求操作完序列 首先可以发现对最后结果有影响的序列$r$一定非增, 并且是升序降序交替的 可以用单调栈维护这 ...
- CodeForces - 631C ——(思维题)
Each month Blake gets the report containing main economic indicators of the company "Blake Tech ...
- codeforces 631C C. Report
C. Report time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...
- Codeforces 631C Report【其他】
题意: 给定序列,将前a个数进行逆序或正序排列,多次操作后,求最终得到的序列. 分析: 仔细分析可以想到j<i,且rj小于ri的操作是没有意义的,对于每个i把类似j的操作删去(这里可以用mult ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
随机推荐
- PIP安装Python的scipy,scrapy等包出现“failed building wheel for xxx”问题解决办法
1.在这里下载对应的.whl文件,注意别改文件名! http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml Ctrl + F,输入lxml,找到下面这段 Lxm ...
- 【linux】 linux 查看系统信息
1.输入"uname -a ",可显示电脑以及操作系统的相关信息. 2.输入"cat /proc/version",说明正在运行的内核版本. 3.输入" ...
- App开发者必备的运营、原型、UI设计工具整理
移动应用开发者们,Attention please!在接下来的内容里,我们将介绍一些能够提高你们的应用的知名度和品质水平的工具. 仔细看看,下面这些工具你们都知道吗,用过吗?如果你还不知道,或许可以尝 ...
- HTML 编辑器
使用 Notepad 或 TextEdit 来编写 HTML 可以使用专业的 HTML 编辑器来编辑 HTML: Adobe Dreamweaver Microsoft Expression Web ...
- 关于checkbox的attr无效的问题
jq用了10版本的,一直发现attr无效,查找良久,由同事帮忙解决该问题,感谢. 特记录下该问题. 由于 新版本attr换成了prop的问题. $("input[name='delIds'] ...
- Linux下编译UnixODBC
编译环境 操作系统: Red Hat Enterprise Linux Server release 5.4 64-bit 编译工具: gcc (GCC) 4.1.2 20080704 (Red Ha ...
- DNS查询指令nslookup
描述: Nslookup指令是一个查询internet域名服务的程序.Nslookup指令有两个模式:交互式和非交互式. 交互式模式允许用户查询不同种类的主机和域名或在一个域名里输出主机列表,目的是查 ...
- makefile中的shell语法
在Makefile中写shell代码有点诡异,和不同的shell语法不太一样,如果不了解,看Makefile会莫名其妙.下面总结了一些. 1:尽在Makefile文件的目标项冒号后的另起一行的代码才是 ...
- 原生js 用正则实现removeclass hasclass getsclass addclass .
function getByClass(oParent,sClass){ if(oParent.getElementsByClassName){ return oParent.getElementsB ...
- OpenGL 开始学习指南
近期需要做一个涌潮的预报与仿真模拟,为了使模型更具有真实感,且逼真,使用起来更灵活.感觉还是得从基础的OpenGL学习.鉴于Direct3D技术存在的众多不确定性,且评论不太好的原因,决定用OpenG ...