1 条题解

  • 0
    @ 2025-4-14 18:45:31

    C++ :

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int N=50000;
    struct node{int id,k,a;}t[N+1];
    int f[N+1],l[N+1],r[N+1],d[N+1];
    int i,n;
    bool cmp(node x,node y){return x.k<y.k;}
    void build()
    {
    	int k,top=-1;
    	for(i=1;i<=n;i++)
    	{
    		k=top;
    		while(k>=0&&t[d[k]].a>t[i].a)
    			k--;
    		if(k!=-1)
    		{
    			f[t[i].id]=t[d[k]].id;
    			r[t[d[k]].id]=t[i].id;
    		}
    		if(k<top)
    		{
    			f[t[d[k+1]].id]=t[i].id;
    			l[t[i].id]=t[d[k+1]].id;
    		}
    		d[++k]=i;
    		top=k;
    	}
    }
    int main()
    {
    	while(~scanf("%d",&n))
    	{
    		memset(f,0,sizeof(f));
    		memset(l,0,sizeof(l));
    		memset(r,0,sizeof(r));
    		for(i=1;i<=n;i++)
    			scanf("%d%d",&t[i].k,&t[i].a),t[i].id=i;
    		sort(t+1,t+n+1,cmp);
    		build();
    		printf("yes\n");
    		for(i=1;i<=n;i++)
    			printf("%d %d %d\n",f[i],l[i],r[i]);
    	}
    	return 0;
    }
    

    Pascal :

    program p26935;
    var k:array[0..50000]of longint;
        w:array[0..50000]of longint;
        a:array[0..50000]of longint;
        ans:array[0..50000,1..3]of longint;
        i,j,t,n,now,total:longint;
    procedure qsort(l,r:longint);
    var i,j,x,y:longint;
    begin
      x:=k[(l+r)div 2];
      i:=l;j:=r;
      repeat
      while k[i]<x do inc(i);
      while k[j]>x do dec(j);
      if i<=j then
        begin
          t:=k[i];k[i]:=k[j];k[j]:=t;
          t:=w[i];w[i]:=w[j];w[j]:=t;
          t:=a[i];a[i]:=a[j];a[j]:=t;
          inc(i);dec(j);
        end;
      until i>j;
      if i<r then qsort(i,r);
      if j>l then qsort(l,j);
    end;{qsort}
    begin{main}
      readln(n);
      for i:=1 to n do
        begin
          readln(k[i],a[i]);
          w[i]:=i;
        end;
      qsort(1,n);
      ans[1,1]:=0;
      ans[1,2]:=0;
      ans[1,3]:=0;
      now:=1;
      for i:=2 to n do
        begin
          while (a[i]<a[now])and(ans[now,1]<>0) do
            now:=ans[now,1];
          if a[i]<a[now] then
            begin
              ans[now,1]:=i;
              ans[i,2]:=now;
            end
          else
            begin
              if ans[now,3]<>0 then begin
                ans[i,2]:=ans[now,3];
                ans[ans[now,3],1]:=i;
                end;
              ans[now,3]:=i;
              ans[i,1]:=now;
            end;
          now:=i;
        end;
      total:=1;
      for i:=1 to n do
        if ans[i,1]<>0 then inc(total);
      if total=n then
        begin
          writeln('yes');
          for i:=1 to n do
            for j:=1 to n do
              begin
               if w[j]=i then
                 writeln(w[ans[j,1]],' ',w[ans[j,2]],' ',w[ans[j,3]]);
              end;
        end
      else  writeln('no');
    end.
    
    
    • 1

    信息

    ID
    3583
    时间
    3000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者