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.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
随机推荐
- android 添加依赖的库文件
Notpad: 2016-3-16: 1.android 添加依赖的库文件 右键自己的项目 -> properties ->android ->在Library处点击add -> ...
- Appium查找元素
记录一些需要记忆的查找元素的内容: 1. driver.findElement(By.name("DELETE"); //We can use the DELETE text ...
- AMD规范基本结构
AMD规范:使用 define 和 require ,基本结构如下: // 定义模块 define(['moduleA', 'moduleB', 'moduleC'], function (modul ...
- 基于HDInsight 3.4 HBase集群规划参考
基于linux 创建HDInsight HBase集群,选择最小配置,zk(3).NN(2).WN(2),集群节点默认组件服务规划如下 NN0: Active NameNode /HDFS ZKFai ...
- Android monkey介绍
Android monkey介绍 原文地址 1 简略 monkey是android下自动化测试比较重要的的一个工具,该工具可以运行在host端或者设备(模拟器或真实设备).它会向系统发送随机事件流(即 ...
- LintCode "Continuous Subarray Sum"
A variation to a classical DP: LCS. class Solution { public: /** * @param A an integer array * @retu ...
- 微软为Visual Studio开发助手拓展C++支持
近日,微软宣布了一项 Visual Studio“开发助手”(Developer Assistant)插件的重大更新,其现已支持“基于 C++ 的情境感知 web 解决方案”.开发助手能够嵌入 Vis ...
- 【转】SQL SERVER CLR存储过程实现
最近做一个项目,需要做一个SQL SERVER 2005的CLR的存储过程,研究了一下CLR的实现.为方便以后再使用,在这里总结一下我的实现流程,也供对CLR感兴趣但又不知道如何实现的朋友们做一下参考 ...
- (WF)InvalidWorkflowException
之前一直运行正常的xaml突然不能运行了,总是显示如下错误. The test caught an unhandled exception. Caught: System.Activities.Inv ...
- java面试常考题
基础知识: 1.C++或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2种情况.一种是JAVA类库 ...