2 条题解

  • 1
    @ 2023-6-21 21:09:13

    debug了半小时,结果发现......

    数组开得不够大!!!\color {grey} 数组开得不够大!!!

    想引用一下曾经最近没开longlonglong long时写的:

    image

    不过数据范围1n2×1051≤n≤2×10^5我数组开到200001200001评测只因你告诉我Standard answer longer than user output....

    得了正题

    22个动态数组,tmptmp是局部的,每次存删除后的水果序列,再赋值给最终的veve

    code:

    #include <bits/stdc++.h>
    using namespace std;
    
    int n,a[300000],l[300000],r[300000];//报复性开大
    vector <int> ve;
    vector <int> tmp;
    
    signed main()
    {
    	freopen("fruit.in","r",stdin);
    	freopen("fruit.out","w",stdout);
        scanf("%d",&n);
        a[0] = a[n + 1] = -1;
    	r[0] = 1;
    	l[n + 1] = n;
        for(int i = 1;i <= n;i++)
    	{
            scanf("%d",&a[i]);
            if(a[i] != a[i - 1]) ve.push_back(i);
            l[i] = i - 1;
    		r[i] = i + 1;
        }
        while(r[0] != n + 1)
    	{
    		tmp.clear();
    		for(int i = 0;i < ve.size();i++)
    		{
                printf("%d ",ve[i]);
                int u = l[ve[i]];
    			int v = r[ve[i]];
                r[u] = v;
    			l[v] = u;
    			if(a[ve[i]] != a[u] && a[ve[i]] == a[v]) tmp.push_back(v); 
    		}
    		ve = tmp;
    		printf("\n");
        }
        return 0;
    }
    

    信息

    ID
    1478
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    22
    已通过
    3
    上传者