4 条题解

  • 1
    @ 2025-4-19 22:02:28

    #include #include #include #include using namespace std; priority_queuedgd;//大根堆 priority_queue<int,vector,greater >xgd;//小根堆 int main() { int p,m,count; scanf("%d",&p); while(p--) { while(dgd.size()) dgd.pop();//清空 while(xgd.size()) xgd.pop();//清空 int x,cnt=0; scanf("%d%d",&count,&m); printf("%d %d\n",count,m/2+1); for(int i=0;i<m;i++) {

      scanf("%d",&x);
      if(xgd.empty())
        xgd.push(x);
      else
      {
        if(x>xgd.top())
          xgd.push(x);
        else
          dgd.push(x);
        while(xgd.size()<dgd.size())
        {
          xgd.push(dgd.top());
          dgd.pop();
        }
        while(xgd.size()>dgd.size()+1)
        {
          dgd.push(xgd.top());
          xgd.pop();
        }
      }
      if((i+1)&1)
      {
        cnt++;
        printf("%d ",xgd.top());
        if(!(cnt%10))
          printf("\n");
      }
    }
    printf("\n");
    

    } return 0; }

    • 0
      @ 2025-3-29 18:57:24

      #include #include #include #include using namespace std; priority_queuedgd;//大根堆 priority_queue<int,vector,greater >xgd;//小根堆 int main() { int p,m,count; scanf("%d",&p); while(p--) { while(dgd.size()) dgd.pop();//清空 while(xgd.size()) xgd.pop();//清空 int x,cnt=0; scanf("%d%d",&count,&m); printf("%d %d\n",count,m/2+1); for(int i=0;i<m;i++) {

        scanf("%d",&x);
        if(xgd.empty())
          xgd.push(x);
        else
        {
          if(x>xgd.top())
            xgd.push(x);
          else
            dgd.push(x);
          while(xgd.size()<dgd.size())
          {
            xgd.push(dgd.top());
            dgd.pop();
          }
          while(xgd.size()>dgd.size()+1)
          {
            dgd.push(xgd.top());
            xgd.pop();
          }
        }
        if((i+1)&1)
        {
          cnt++;
          printf("%d ",xgd.top());
          if(!(cnt%10))
            printf("\n");
        }
      }
      printf("\n");
      

      } return 0; }

      • 0
        @ 2021-8-7 18:35:25

        C++ :

        #include<iostream>
        #include<cstdio>
        #include<queue>
        #include<vector>
        using namespace std;
        priority_queue<int>dgd;//大根堆
        priority_queue<int,vector<int>,greater<int> >xgd;//小根堆
        int main()
        {
          int p,m,count;
          scanf("%d",&p);
          while(p--)
          {
            while(dgd.size())
              dgd.pop();//清空
            while(xgd.size())
              xgd.pop();//清空
            int x,cnt=0;
            scanf("%d%d",&count,&m);
            printf("%d %d\n",count,m/2+1);
            for(int i=0;i<m;i++)
            {
              
              scanf("%d",&x);
              if(xgd.empty())
                xgd.push(x);
              else
              {
                if(x>xgd.top())
                  xgd.push(x);
                else
                  dgd.push(x);
                while(xgd.size()<dgd.size())
                {
                  xgd.push(dgd.top());
                  dgd.pop();
                }
                while(xgd.size()>dgd.size()+1)
                {
                  dgd.push(xgd.top());
                  xgd.pop();
                }
              }
              if((i+1)&1)
              {
                cnt++;
                printf("%d ",xgd.top());
                if(!(cnt%10))
                  printf("\n");
              }
            }
            printf("\n");
          }
          return 0;
        }
        
        
        • -1
          @ 2022-10-15 19:43:41
          #include<cstring>
          #include<algorithm>
          #define  N  11000
          using  namespace  std;
          struct  fuck
          {
          	int  x,y;
          }a[N];
          inline  bool  cmp(fuck  x,fuck  y){return  x.x<y.x;}
          struct  node
          {
          	int  l,r,x/*权值*/;
          }b[N];
          void  del(int  x)
          {
          	b[b[x].l].r=b[x].r;
          	b[b[x].r].l=b[x].l;
          }
          int  n,be[N];
          int  list[N],top;
          int  main()
          {
          	int  T;scanf("%d",&T);
          	while(T--)
          	{
          		top=0;
          		int  t;scanf("%d%d",&t,&n);
          		for(int  i=1;i<=n;i++)
          		{
          			scanf("%d",&a[i].x);
          			a[i].y=i;
          			b[i].l=i-1;b[i].r=i+1;
          		}
          		sort(a+1,a+n+1,cmp);
          		for(int  i=1;i<=n;i++)be[a[i].y]=i,b[i].x=a[i].x;//确定其在链表中的位置 
          		int  ans=n/2+1,l=n/2/*左边有多少个数字*/,r=n/2/*右边有多少个数字*/;
          		for(int  i=n;i>=1;i--)//按顺序删除 
          		{
          			if(i%2==1)
          			{
          				if(l<r)
          				{
          					ans=b[ans].r;l++;r--;
          				}
          				else  if(l>r)
          				{
          					ans=b[ans].l;l--,r++;
          				}
          				list[++top]=b[ans].x;
          			}
          			if(be[i]==ans)//刚好卡在中位数的位置
          			{
          				if(l>r)ans=b[ans].l,l--,r++;
          				else  if(l<=r)ans=b[ans].r,l++,r--;
          			}
          			if(be[i]>ans)r--;
          			else  l--;
          			del(be[i]);
          		}
          		//后面就是输出的问题了。
          		printf("%d %d\n",t,n/2+1);
          		int  now=0;
          		for(int  i=top;i>=1;i--)
          		{
          			now++;
          			if(now>10)
          			{
          				now-=10;
          				printf("\n");
          			}
          			printf("%d",list[i]);
          			if(now!=10)printf(" ");
          		}
          		printf("\n");
          	}
          	return  0;
          }
          
          
          • 1

          信息

          ID
          18
          时间
          1000ms
          内存
          128MiB
          难度
          3
          标签
          递交数
          205
          已通过
          114
          上传者