2017 ACM-ICPC 亚洲区(青岛赛区)网络赛 1010

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<set>
#include<bitset>
#include<map>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
#define bug(x) cout<<"bug"<<x<<endl;
#define PI acos(-1.0)
#define eps 1e-8
const int N=1e5+100,M=1e5+100;
const int inf=0x3f3f3f3f;
const ll INF=1e18+7,mod=1e9+7;
int a[N];
int pre[N],ne[N];
bool vis[N],inq[N];
queue<int>q;
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        memset(vis,false,sizeof(vis));
        memset(inq,false,sizeof(inq));
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);
            pre[i]=i-1,ne[i]=i+1;
        }
        a[0]=0,a[n+1]=inf;
        ne[0]=1,pre[n+1]=n;
        for(int i=1; i<=n; i++)
        {
            int s=pre[i];
            while(i<=n&&!(a[i-1]<=a[i]&&a[i]<=a[i+1]))
            {
                vis[i]=true;
                i++;
            }
            if(s==pre[i]) continue;
            ne[s]=i,pre[i]=s;
            if(1<=s&&s<=n&&!inq[s]) q.push(s),inq[s]=true;
            if(1<=i&&i<=n&&!inq[i]) q.push(i),inq[i]=true;
        }
        while(!q.empty())
        {
            int i=q.front();
            inq[i]=false;
            q.pop();
            if(vis[i]) continue;
            int s=pre[i];
            while(i<=n&&!(a[pre[i]]<=a[i]&&a[i]<=a[ne[i]]))
            {
                vis[i]=true;
                i=ne[i];
            }
            if(s==pre[i]) continue;
            ne[s]=i,pre[i]=s;
            if(1<=s&&s<=n&&!inq[s]) q.push(s),inq[s]=true;
            if(1<=i&&i<=n&&!inq[i]) q.push(i),inq[i]=true;
        }
        int ans=0;
        for(int i=0; i<n; i=ne[i])
            if(ne[i]<=n) ans++;
        printf("%d\n",ans);
        for(int i=0; i<n; i=ne[i])
            if(ne[i]<=n) printf("%d ",a[ne[i]]);
        printf("\n");
    }
    return 0;
}

模拟

时间: 2024-08-06 16:04:58

2017 ACM-ICPC 亚洲区(青岛赛区)网络赛 1010的相关文章

2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5984 Pocky 题意 给出一根棒子(可以吃的)的长度x和切割过程中不能小于的长度d,每次随机的选取一个位置切开,吃掉左边的一半,对右边的棒子同样操作,直至剩余的长度不大于d时停止.现在给出x和d,问切割次数的数学期望是多少. 解题思路 当看到第二个样例2 1时,结果是1.693147,联想到ln

2014ACM/ICPC亚洲区鞍山赛区现场赛——题目重现

2014ACM/ICPC亚洲区鞍山赛区现场赛--题目重现 题目链接 5小时内就搞了5题B.C.D.E,I. H题想到要打表搞了,可惜时间不够,后面打出表试了几下过了- - K题过的人也比较多,感觉是个几何旋转+ploya,但是几何实在不行没什么想法 B:这题就是一个大模拟,直接数组去模拟即可,注意细节就能过 C:类似大白上一题红蓝三角形的, 每个数字找一个互质和一个不互质个数,除掉重复就直接除2,然后总的C(n, 3)减去即可,问题在怎么处理一个数字互质和不互质的,其实只要处理出不互质的即可,这

ICPC 2018 徐州赛区网络赛

ACM-ICPC 2018 徐州赛区网络赛 ?去年博客记录过这场比赛经历:该死的水题 ?一年过去了,不被水题卡了,但难题也没多做几道.水平微微有点长进. ? ? D. Easy Math 题意: ? 给定 \(n\), \(m\) ,求 \(\sum _{i=1}^{m} \mu(in)\) .其中 $ 1 \le n \le 1e12$ , $ 1 \le m \le 2e9$ ,\(\mu(n)\) 为莫比乌斯函数. ? 思路: ? 容易知道,\(i\) 与 \(n\) 不互质时, \(\m

HDU 5884 Sort -2016 ICPC 青岛赛区网络赛

题目链接 #include <iostream> #include <math.h> #include <stdio.h> #include<algorithm> #include<cstring> #include<queue> using namespace std; int data[100005]; int main() { int T,n,t; scanf("%d",&T); while(T--)

HDU 5878 I Count Two Three (打表+二分查找) -2016 ICPC 青岛赛区网络赛

题目链接 题意:给定一个数n,求大于n的第一个只包含2357四个因子的数(但是不能不包含其中任意一种),求这个数. 题解:打表+二分即可. #include <iostream> #include <math.h> #include <stdio.h> #include<algorithm> using namespace std; long long data[1000000],tot=0; int main() { long long maxn = 10

HDU 5879 Cure -2016 ICPC 青岛赛区网络赛

题目链接 题意:给定一个数n,求1到n中的每一项的平方分之一的累加和. 题解:题目没有给数据范围,而实际上n很大很大超过long long.因为题目只要求输出五位小数,我们发现当数大到一定程度时值是固定的 pi*pi/6.小的打表就行了,这里打表为了防止爆内存我用了优化的方法,类似于我之前写的light oj 1234. #include <iostream> #include <math.h> #include <stdio.h> #include <cstri

HDU 5881 Tea -2016 ICPC 青岛赛区网络赛

题目链接 题意:有一壶水, 体积在 L和 R之间, 有两个杯子, 你要把水倒到两个杯子里面, 使得杯子水体积几乎相同(体积的差值小于等于1), 并且使得壶里剩下水体积不大于1. 你无法测量壶里剩下水的体积, 问最小需要倒水的次数. 题解:考虑倒水的大致过程,L = 0 和 L = 1 的情况应该是等价的,所以不妨设 L > 0.首先向一个杯子倒 L/2 升水,再往另一个杯子倒  L/2+1 升水.接下来就来回往两个杯子里倒 2 升,直到倒空为止.这样就很容易分析出需要倒水的次数.唯一注意的是最后

2016 ACM/ICPC亚洲区大连站-重现赛 解题报告

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5979 按AC顺序: I - Convex Time limit    1000 ms Memory limit 65536 kB OS Windows We have a special convex that all points have the same distance to origin point. As you know we can get N segments after linki

2014ACM/ICPC亚洲区鞍山赛区现场赛1009Osu!

鞍山的签到题,求两点之间的距离除以时间的最大值.直接暴力过的. A - Osu! Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 5078 Appoint description:  System Crawler  (2014-10-22) Description Osu! is a very popular music game. B

hdu6206 Apple 2017 ACM/ICPC Asia Regional Qingdao Online

地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6206 题目: Apple Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 530    Accepted Submission(s): 172 Problem Description Apple is Taotao's favouri