蚯蚓

Noip2016 day2t3

蚯蚓

蚯蚓在noip好像是个神宠。这次是被切了,开三个队列,q[3][1000010],q[0]代表没有被切的,q[1]表示切的p部分,q[2]表示(1-p)部分,q[1],q[2]能够保证单调不增,q[0]从大到小排序,每次比队首即可,这里用懒惰标记的思想,用add累加,放回去的时候,再减去。

 

#include<bits/stdc++.h>
using namespace std;
int n,m,len,u,v,t,add,q[3][10000010],head[3],tail[3];
void in(int &x)
{
    char c=getchar();x=0;
    while(c<'0'||c>'9')c=getchar();
    while(c<='9'&&c>='0')x=x*10+c-'0',c=getchar();
}

void out(int x)
{
    if(x>9)out(x/10);
    putchar(x%10+'0');
}

bool cmp(int x,int y) 
{
return x>y;    
}

int main()
{
  memset(q,-0x7f,sizeof(q));
  in(n),in(m),in(len),in(u),in(v),in(t);
  long long x;
  int xx;
  for(int i=1;i<=n;i++)
  {
      in(xx);
      q[0][i]=xx;
  }
  sort(q[0]+1,q[0]+n+1,cmp);
  head[0]=head[1]=head[2]=1;
  tail[0]=n;
  long long  Max;
  long long l,r;
  for(int i=1;i<=m;i++)
  {
      Max=q[0][head[0]]>=q[1][head[1]]?0:1;
      Max=q[Max][head[Max]]>=q[2][head[2]]?Max:2;
      x=q[Max][head[Max]++]+add;
      if(i%t==0)
      out(x),putchar(' ');
      l=x*u/v;
      r=x-l;
      q[1][++tail[1]]=l-add-len;
      q[2][++tail[2]]=r-add-len;
      add+=len;
  }
  putchar('\n');
  for(int i=1;i<=m+n;i++)
  {
       Max=q[0][head[0]]>=q[1][head[1]]?0:1;
       Max=q[Max][head[Max]]>=q[2][head[2]]?Max:2;
       x=q[Max][head[Max]++];
       if(i%t==0)
       out(x+add),putchar(' ');
  }
  return 0;
}

 

posted @ 2017-08-25 10:18  WeiAR  阅读(113)  评论(0编辑  收藏  举报