zoukankan      html  css  js  c++  java
  • 【csp模拟赛2】 序列操作

       线性推,开数组太麻烦,可以用指针

    代码:

    #include <iostream>
    #include <cstdio>
    #include <queue>
    using namespace std;
    const int N = 100010;
    inline int read()
    {
    	int x = 0 , f = 1;	char ch = getchar();
    	while(ch < '0' || ch > '9')	{if(ch == '-')	f = -1; ch = getchar();}
    	while(ch >= '0' && ch <= '9') {x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar();}
    	return x * f;
    }
    struct node
    {
    	int val,vis;
    	node *nxt , *fa;
    	node () {val = vis = 0;nxt = fa = NULL;}
    }*root;
    struct num
    {
    	int val;
    	node *p;
    	friend bool operator < (const num & a,const num & b) { return a.val < b.val;}
    };
    int n , cnt;
    priority_queue<num>q;
    int main()
    {
    	#ifdef yilnr
    	#else
    	freopen("ysy.in","r",stdin);
    	freopen("ysy.out","w",stdout);
    	#endif
    	n = read();
    	node *p = root =new node();
    	for(int i = 1;i <= n;i ++)
    	{
    		p -> val = read();
    		q.push( (num) {p -> val,p});
    		if(i < n)
    		{
    			p -> nxt = new node();
    			p -> nxt -> fa = p;
    			p = p -> nxt;
    		}
    	}
    	while(cnt != (n >> 1))
    	{
    		node *p = q.top().p;
    		q.pop();
    		if(p -> nxt == NULL) continue;
    		if(p -> vis || p -> nxt -> vis) continue;
    		printf("%d %d ",p -> val,p -> nxt -> val);
    		cnt ++;
    		if(p -> fa && p -> nxt && p -> nxt -> nxt)
    		{
    			p -> nxt -> nxt -> fa = p -> fa;
    			p -> fa -> nxt = p -> nxt -> nxt;
    		} 
    		p -> vis = 1;
    		p -> nxt -> vis = 1;
    	}
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    /*
    12
    4 3 6 10 12 11 5 8 2 1 7 9
    */
    

      

  • 相关阅读:
    关于选择器
    关于定位
    jq第一讲
    js第三讲
    js第2讲
    js第一讲
    HTML第三讲的补充及HTML5新增标签和属性
    CSS第 三讲概要
    CSS第二讲概要
    CSS第一讲概要
  • 原文地址:https://www.cnblogs.com/yelir/p/11536955.html
Copyright © 2011-2022 走看看