求助卡常

P3793 由乃救爷爷

7KByte @ 2020-08-10 17:10:47

Rt,本机不开o2只用3s,#2#8TLE。

估计是使用高峰期的原因。

#include<cstdio>
#include<cmath>
#define max(a,b) (a>b?a:b)
#define rep(i,a,b) for(register int i=a;i<=b;i++)
#define pre(i,a,b) for(register int i=a;i>=b;i--) 
#define N 20005005
int v[N],pos[N]; 
int l[N],r[N],Max[6300],f[6300][6300];
void swap(int &x,int &y){int t=x;x=y;y=t;}
long long ed=0;
namespace GenHelper
{
    unsigned z1,z2,z3,z4,b;
    unsigned rand_()
    {
    b=((z1<<6)^z1)>>13;
    z1=((z1&4294967294U)<<18)^b;
    b=((z2<<2)^z2)>>27;
    z2=((z2&4294967288U)<<2)^b;
    b=((z3<<13)^z3)>>21;
    z3=((z3&4294967280U)<<7)^b;
    b=((z4<<3)^z4)>>12;
    z4=((z4&4294967168U)<<13)^b;
    return (z1^z2^z3^z4);
    }
}
void srand(unsigned x)
{using namespace GenHelper;
z1=x; z2=(~x)^0x233333333U; z3=x^0x1234598766U; z4=(~x)+51;}
int read()
{
    using namespace GenHelper;
    int a=rand_()&32767;
    int b=rand_()&32767;
    return a*32768+b;
}
int n,m,s;
int main()
{
    scanf("%d%d%d",&n,&m,&s);srand(s);
    for(int i=1;i<=n;i++)v[i]=read();
    //rep(i,1,n)printf("%d\n",v[i]);
    int len=pow(n,0.48);
    int bas=n/len+(n%len?1:0);
    //printf("%d %d\n",len,bas);system("PAUSE");
    rep(i,1,n){
        pos[i]=(i-1)/len+1;
        if(i%len==1)l[i]=v[i];
        else l[i]=max(l[i-1],v[i]);
    }
    pre(i,n,1)
        if(pos[i]!=pos[i+1])r[i]=v[i];
        else r[i]=max(v[i],r[i+1]);
    rep(i,1,bas)
      for(int j=(i-1)*len+1;j<=i*len;j++)
        Max[i]=max(Max[i],v[j]);
    rep(i,1,bas)
      f[i][i-1]=0;
    rep(i,1,bas)
      rep(j,i,bas)
        f[i][j]=max(f[i][j-1],Max[j]);
    register int L,R,ans;
    rep(i,1,n){
        L=read()%n+1,R=read()%n+1,ans=0;
        if(L>R)swap(L,R);
        if(pos[L]==pos[R]){
            for(int i=L;i<=R;i++)
              ans=max(ans,v[i]); 
        }
        else ans=max(f[pos[L]+1][pos[R]-1],max(r[L],l[R]));
        ed+=ans;
    }
    printf("%lld\n",ed);
    return 0;
 }
 /*
 20000000 20000000 233
 */

by Prean @ 2020-08-10 17:15:29

我当初卡了一个下午都没卡过去


by 鏡音リン @ 2020-08-10 17:17:50

那就等到半夜再交


by WZKQWQ @ 2020-08-10 17:18:41

菜鸡路过,不敢吭声


by WZKQWQ @ 2020-08-10 17:19:01

后排围观神仙讨论


by 7KByte @ 2020-08-10 17:19:44

算了还是特判(一千五百万和两千万差距不大吧


by critnos @ 2020-08-10 21:11:37

@Inf_Voltage 套取数据过题,browned

第一次见到有人写分块 ST 欸

欸不对这个不是分块 ST 表吧

感谢一种新的写法,窝现在写写试试QAQ


by 7KByte @ 2020-08-10 21:55:51

@mcyl35 不用ST表,期望复杂度也是O(N)


by critnos @ 2020-08-10 21:57:28

@Inf_Voltage 是的。


by critnos @ 2020-08-11 13:18:42

@Inf_Voltage 另外我试了一下,这个做法很难过,一直差 200ms 左右,最好是 5.16s,分块 ST 大概时间总和快 1~2s


by Stinger @ 2021-02-16 14:28:23

现在IV已经是SV了/xyx


|