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 ...
随机推荐
- Swift 烧脑体操(三) - 高阶函数
前言 Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融入了大量新特性.这也使得我们学习掌握这门语言变得相对来说更加困 ...
- CSS3 3D下拉折叠菜单
在线演示 本地下载
- html5+CSS3实现的炫酷超链接特效
今天为大家介绍一个非常炫酷的超链接特效.在你做一些前端的网页时可以在里面去用上这些前卫时尚的效果. 这些超链接特性,大都是借助伪元素.svg.HTML5动画来实现的.效果都很漂亮,不信看下面. 用你的 ...
- BZOJ 1640 [Usaco2007 Nov]Best Cow Line 队列变换:贪心【字典序最小】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1640 题意: 给你一个长度为n的字符串. 你可以将原串的首字母或尾字母移动到新串的末尾. ...
- django model中get()和filter()方法的区别
django的get()方法是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错. django的filter()方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在 ...
- xgboost算法原理
XGBoost是2014年3月陈天奇博士提出的,是基于CART树的一种boosting算法,XGBoost使用CART树有两点原因:对于分类问题,CART树的叶子结点对应的值是一个实际的分数,而非一个 ...
- ivew组件的使用
iview的官网:https://www.iviewui.com/docs/guide/start 1.选择快速上手 2.安装 解压,cmd,cd进你解压后的文件,cnpm i 3.打包 npm ru ...
- P2060 [HNOI2006]马步距离
P2060 [HNOI2006]马步距离 数据到百万级别,明显爆搜不行,剪枝也没法剪.先打表.发现小数据内步数比较受位置关系影响,但数据一大就不影响了.大概搜了一个20*20的表把赋值语句打出来.判断 ...
- 【QT】《转载》常用快捷键
F1 查看帮助F2 跳转到函数定义(和Ctrl+鼠标左键一样的效果)Shift+F2 声明和定义之间切换F4 头文件和源文件之间切换Ctrl+1 ...
- 【Lintcode】177.Convert Sorted Array to Binary Search Tree With Minimal Height
题目: Given a sorted (increasing order) array, Convert it to create a binary tree with minimal height. ...