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.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
随机推荐
- JAVA除法保留小数点后两位的两种方法 Java Math的 floor,round和ceil的总结
floor 返回不大于的最大整数 round 则是4舍5入的计算,入的时候是到大于它的整数round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下 ...
- jquery的$.extend和$.fn.extend作用及区别.txt
jQuery为开发插件提拱了两个方法,分别是: jQuery.fn.extend(); jQuery.extend(); (1)类级别 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax ...
- eclipse下gradle配置
eclipse下gradle配置 这可真麻烦啊,一个项目把java的东西学习完了!这不,刚弄完maven又来了个gradle. http://gradle.org/gradle-download 1. ...
- Nginx 性能优化
1.安全优化:隐藏Nginx版本号,server_tokens off; 2.安全优化:更改掉默认的用户 user nginx; 3.性能优化: 根据硬件配置,调整nginx worker 进程数 ...
- RMAN备份与恢复之DataBase
1 准备 [oracle@TEST144239 /]$ sqlplus /nolog SQL Production :: Copyright (c) , , Oracle. All rights ...
- 【redis】 linux 下redis 集群环境搭建
Redis集群 (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 127.0.0.1:63791 ...
- [mysql] Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'loser.tank_admin.login_ip' which is not functionally dependent on columns in GROUP BY clause; this is
执行SQL: SELECT login_name,login_ip,sex FROM tank_admin GROUP BY login_name ; 时抛出异常. Expression #2 of ...
- activiti自定义流程之自定义表单(一):环境配置
先补充说一下自定义流程整个的思路,自定义流程的目的就是为了让一套代码解决多种业务流程,比如请假单.报销单.采购单.协作单等等,用户自己来设计流程图. 这里要涉及到这样几个基本问题,一是不同的业务需求, ...
- 二. log4j配置文件
log4j的配置文件 # Output pattern : date [thread] priority category - message log4j.rootLogger=info,Consol ...
- NeHe OpenGL教程 第十七课:2D图像文字
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...