hdu 6215(技巧)

来源:互联网 发布:百叶窗 知乎 编辑:程序博客网 时间:2024/06/15 08:06


题意:给出一个数组,然后将里面连续递减的删去,然后形成一个新的数列,继续这样操作,求最后形成的数列。

PS:北大20分钟过的题最后还是没有过。关键是这个思想确实比较强大。

用一个左右指针,然后更新,然后维护。看了北大队员的代码,自愧不如。


#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<int,int> P;#define fi first#define se second#define INF 0x3f3f3f3f#define clr(x,y) memset(x,y,sizeof x)#define PI acos(-1.0)#define ITER set<int>::iteratorconst int Mod = 1e9 + 7;const int maxn = 1e5 + 10;const int N = 2;int a[maxn],le[maxn],ri[maxn],q[maxn];bool vis[maxn];int main(){    int Tcase;scanf("%d",&Tcase);    while(Tcase --)    {        int n;scanf("%d",&n);        for(int i = 1; i <= n;i ++)scanf("%d",&a[i]);        a[0] = 0;a[n + 1] = maxn;clr(vis,false);        int l = 1,r = 0;        for(int i = 1; i <= n;i ++)        {            if(a[i] < a[i - 1])            {                if(!vis[i - 1]){vis[i - 1] = true,q[++ r] = i - 1;}//cout << i - 1 << " ";}                vis[i] = true,q[++ r] = i;//cout << i << " ";            }            le[i] = i - 1,ri[i] = i + 1;        }        while(l <= r)        {            int rr = r;            for(int i = l; i <= rr;i ++)            {                le[ri[q[i]]] = le[q[i]];ri[le[q[i]]] = ri[q[i]];                if(le[q[i]] == 0 || ri[q[i]] == n + 1)continue;                if(!vis[ri[q[i]]] && a[ri[q[i]]] < a[le[q[i]]])                {                    if(!vis[le[q[i]]]){q[++ r] = le[q[i]],vis[le[q[i]]] = true;}//cout << le[q[i]] << " ";}                    vis[ri[q[i]]] = true,q[++ r] = ri[q[i]];//cout << ri[q[i]] << " ";                }            }            l = rr + 1;        }        printf("%d\n",n - r);        for(int i = 1;i <= n;i ++)if(!vis[i])printf("%d ",a[i]);puts("");    }    return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新货车上户超重怎么办 车险出保单车号填错怎么办 货车拦板变形了怎么办 行车监控看不清楚车号怎么办? 1.5米的鱼缸要怎么办 被锤子砸到手了怎么办 家里地下污水管道堵塞怎么办 家里pvc灯罩变黄怎么办 欧普吸顶灯灯罩坏了怎么办 硬盘用久了变慢怎么办 地税申报工资人员弄错怎么办 买保险保单丢了怎么办 买保险的银行卡丢了怎么办 没学过JAVA入职怎么办 磨砂皮擦了鞋油怎么办 磨破皮伤口有沙子怎么办 工行信用卡被风险锁定了怎么办 超重被超限站查住以后怎么办 银行卡输入密码次数超限怎么办 信用卡密码错误次数超限怎么办 农行密码错误次数超限怎么办 剪力墙偏心受拉怎么办 韵达快递寄丢了怎么办 重要快递送丢了怎么办 快递员送货丢了怎么办 买的快递丢失了怎么办 申通把件弄丢了怎么办 淘宝快递送丢了怎么办 我的快递丢了怎么办 顺丰快递丢件怎么办 韵达快递不发货怎么办 发物流丢了怎么办啊 圆通快递寄丢了怎么办 中通快递弄丢了怎么办 中通快递寄丢了怎么办 中通快递丢了怎么办 物流没保价坏了怎么办 顺丰保值快递丢了怎么办 顺丰保价件丢失怎么办 公司购买货物对方没有发票怎么办 加工货物对方不取怎么办