zoukankan      html  css  js  c++  java
  • 蚯蚓

    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('
    ');
      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;
    }
  • 相关阅读:
    A
    E
    C
    A
    exgcd
    博客
    简单数论
    extended_gcd(扩展欧几里德算法) 青蛙的约会
    扩展欧几里德算法—求解不定方程,线性同余方程
    素数筛 E
  • 原文地址:https://www.cnblogs.com/war1111/p/7426733.html
Copyright © 2011-2022 走看看