Codeforces631C【栈维护+瞎搞】
题意:
百度。
思路:
如果该查询的R比前面的所有都大,那么前面所有都失效。
那么我先预处理出这些有效的。
那最坏的情况不就是栈里面元素(R)很多
n,n-1,n-2,n-3,n-4而且都是相反排序的。。。
总不能每次都那样循环一下,跟着他变吧。
所以找特性:
如果有序列132456
我的栈是
1 6
2 5
1 3
2 2
那么第一步从sort完:123456,那么这个a[6]=6肯定是确定了对吧。
继续看 2 5:我们能确定 a[5]=1,a[4]=2 对吧
继续看1 3 :我们能确定a[3]=5。
继续看2 2:我们能确定a[2]=3,a[1]=4.
最后输出。这样我觉得仔细自己想想就能瞎搞出来了!自己想出来的方法才有乐趣啊~
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
const int N=2e5+10;
struct asd{
int flag;
int R;
}e[N];
stack<asd>q;
int a[N],b[N][2];
int tp[N];
bool cmp(int x,int y)
{
return x>y;
}
int main()
{
asd now,nex;
int n,t;
scanf("%d%d",&n,&t);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=t;i++)
scanf("%d%d",&e[i].flag,&e[i].R);
for(int i=1;i<=t;i++)
{
while(!q.empty()&&q.top().R<e[i].R)
q.pop();
if(!q.empty()&&e[i].flag==q.top().flag)
continue;
q.push(e[i]);
}
int num=0;
while(!q.empty())
{
num++;
b[num][0]=q.top().flag;b[num][1]=q.top().R;
q.pop();
}
if(b[num][0]==1)
sort(a+1,a+b[num][1]+1);
else
sort(a+1,a+b[num][1]+1,cmp);
if(num==1)
{
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}
int ii=n,jj=1,ij=n;
int s=1;
for(;ij>b[num][1];ij--,ii--)
tp[ij]=a[ij];
for(int i=num;i>=2;i--)
{
int cnt=b[i][1]-b[i-1][1];
if(s%2==0)
for(int p=1;p<=cnt;p++,ij--,jj++)
tp[ij]=a[jj];
else
for(int p=1;p<=cnt;p++,ij--,ii--)
tp[ij]=a[ii];
s++;
}
if(s%2==0)
for(int p=1;p<=b[1][1];p++,ij--,jj++)
tp[ij]=a[jj];
else
for(int p=1;p<=b[1][1];p++,ij--,ii--)
tp[ij]=a[ii];
for(int i=1;i<=n;i++)
printf("%d ",tp[i]);
return 0;
}
/*
6 4
1 3 4 5 2 6
1 6
2 5
1 3
2 2
*/
Codeforces631C【栈维护+瞎搞】的更多相关文章
- URAL 1203. Scientific Conference(瞎搞)
题目链接 本来觉得这不是经典的贪心吗..果断水一次,wa了,看了看discuss,发现貌似不好水,土土的DP了一下,复杂度很高了,又T了...然后想想单调队列,二分什么的...不好往上加,直接搞了标记 ...
- Codeforces Gym 100610 Problem H. Horrible Truth 瞎搞
Problem H. Horrible Truth Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1006 ...
- [置顶] hdu 4699 2个栈维护 or 伸展树
hdu 4699 Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和.. 注意这里的k是在光标之前的, ...
- UVA1619 栈维护递增序列
先说这题的关键性质:每一个数应该只会计算一次,它有一个最小区间[L,R],即它在这个区间内是最小的,最小区间内任何包含它的子区间都不会大于F(L,R)=(a[L]+...+a[R])*min(a[l] ...
- CF797F Mice and Holes 贪心、栈维护DP
传送门 首先\(\sum c\)有些大,考虑将其缩小降低难度 考虑一个贪心:第一次所有老鼠都进入其左边第一个容量未满的洞(如果左边没有就进入右边第一个未满的洞),第二次所有老鼠都进入其右边第一个容量未 ...
- B. Salty Fish Go! -期望题(瞎搞题)
链接:https://www.nowcoder.com/acm/contest/104/B来源:牛客网 题意:A few days ago, WRD was playing a small game ...
- HDU5532 Almost Sorted Array(最长上升子序列 or 瞎搞个做差的数组)
题目链接:点我 题意:给定一个序列,询问是否能删除一个数让它成为非递减或者非递增的序列. 比如说 删除后的序列是1 3 3 5 或者5 3 3 1 或者1 3 5 或者5 3 1 都可以.只要满足删掉 ...
- TOJ3097: 单词后缀 (字典树 or map瞎搞)
传送门 (<---可以点击的~) 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 描述 有些英语单词后缀都是一样的,现在我们需要从给定的一堆单词里 ...
- bzoj1007: [HNOI2008]水平可见直线 单调栈维护凸壳
在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.例如,对于直线:L1:y=x; L2:y=-x; L3 ...
随机推荐
- 题解 CF576C 【Points on Plane】
题解 CF576C [Points on Plane] 一道很好的思维题. 传送门 我们看这个曼哈顿距离,显然如果有一边是按顺序排列的,显然是最优的,那另一边怎么办呢? 假如你正在\(ioi\)赛场上 ...
- 高性能 Socket 组件 HP-Socket v3.2.1-RC1 公布
HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件.包括服务端组件.client组件和 Agent 组件.广泛适用于各种不同应用场景的 TCP/UDP 通信系统.提供 C/C+ ...
- SAP-财务知识点
[转自 http://blog.itpub.net/195776/viewspace-1023912/] SAP FI/CO Reading RepositorySAP财务成本知识库 目 录前言.一. ...
- 微信小程序上传项目到github
Step1:点击使用版本控制 点击开发工具右上角的版本控制按钮 Step2:点击初始化本地仓库: 等待初始化结束 Step3:在github新建仓库 Step4: 配置git用户密码或ssh: Ste ...
- PAT 甲级 1005. Spell It Right (20) 【字符串】
题目链接 https://www.patest.cn/contests/pat-a-practise/1005 思路 因为 n <= 10^100 所以 要用字符串读入 但是 100 * 100 ...
- BZOJ 3083 遥远的国度 树链剖分+线段树
有换根的树链剖分的裸题. 在换根的时候注意讨论. 注意数据范围要开unsigned int或longlong #include<iostream> #include<cstdio&g ...
- VLAN虚拟局域网技术(三)-计算机网络
本文主要知识来源于学校课程,部分知识来自于H3C公司教材,未经许可,禁止转载.如需转载,请联系作者并注明出处. 本节主要介绍 pVLAN和 动态VLAN. 1. pVLAN:英文全称Private ...
- cmake编译成功之后VS2015可以build Solution但是不可以运行的解决办法
1.在VS2015解决方案管理器中删除掉ALL_BUILD和ZERO_CHECK项,只保留Cmake生成的工程文件. 2.进行第一部之后还是有可能生成(build)失败,此时有可能是缺少文件.
- Java常用四大线程池用法以及ThreadPoolExecutor详解
为什么用线程池? 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处-理效率 2.线程并发数量过多,抢占系统资源从而导致阻塞 3.对线程进行一些简单的管理 在Java中,线 ...
- CentOS 7编译安装Tengine+PHP+MariaDB全程笔记
安装环境:CentOS7 3.10.0-693.5.2.el7.x86_64 准备源码包: pcre-8.41.tar.gz openssl-1.0.1h.tar.gz zlib-1.2.11.tar ...