全RE求助
  • 板块P6851 onu
  • 楼主cmll02
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/10/10 20:04
  • 上次更新2023/11/5 11:18:06
查看原帖
全RE求助
171487
cmll02楼主2020/10/10 20:04
问题出在 (*) 处,j<0了,不知道咋回事,求助dalao

#include <stdio.h>
#include <algorithm>
#include <string.h>
inline long long read()
{
    long long num = 0; char c = getchar();
    while (c<48 || c>57)c = getchar();
    while (c >= 48 && c <= 57)num = (num << 3) + (num << 1) + (c ^ 48), c = getchar();
    return num;
};
/*#define test(x) if(x)\
    {\
        while(1)int *q=new int[9999999];\
    }/**/
struct C{
    long long i,hs,d;
}c[100005],d[100005];
long long q,u[100005],ans[100005];
bool cmp(C a,C b)
{
    return ((a.hs==b.hs)?(a.d<b.d):(a.hs<b.hs));
}
inline long long getk(long long as,long long bs,long long ae,long long be,long long cc)
{
    long long al=ae-as+1,bl=be-bs+1;
    if(al>bl){q-=(al-bl)*cc;al=bl;ae=al+as-1;}
//  printf("q:%d\n",q);
//  else if(al<bl)
    {
        long long j=be;
        for(long long i=ae;i>=as;i--)
        {
            if((c[i].d<=d[j].d)&&(j>=bs))
            {
                ans[c[i].i]=(d[j].i+2);
                q+=(cc+d[j].d);
        //      printf("d=%d %d , q = %d(win)\n",d[i].hs,d[i].d,q);
                u[j]+=1;
                u[i]+=2;;
                j--;
            }
        }
        j=be;
        for(long long i=ae;i>=as;i--)
        {
            if((u[i]<=1))
            {
                while((u[j]&1)&&j>bs)j--;
        //      u[j]^=1;
                q+=(d[j].d-cc);
                ans[c[i].i]=(d[j].i+2);
    //          printf("d=%d %d , q = %d(lose)\n",d[i].hs,d[i].d,q);
        //      u[i]=u[i]^2;//此处j<0(*)
            }
        }
    }
/*  if(al==bl)
    {

    }*/
}
inline long long max(long long a,long long b)
{
    return (a>b?a:b);
}
signed main()//l[i]?¨¤¡§a¡§o??¨¢?3?¨¨3?¨¨?¡§¡§ 
{
    long long m=read(),n=read(),cc=read(),v=read(),maxf=0;//v is tot. c is once;
//  memset(ans,-1,sizeof(ans));
    for(long long i=0;i<m;i++)
    {
        long long a=read(),b=read();
        d[i].i=i;
        d[i].hs=a;
        d[i].d=b;
    }
    for(long long i=0;i<n;i++)
    {
        long long a=read(),b=read();
        maxf=max(maxf,a);
        c[i].i=i;
        c[i].hs=a;
        c[i].d=b;
    }
    std::sort(c,c+n,cmp);
    std::sort(d,d+m,cmp);
    long long ci=0,di=0;
    for(long long i=1;i<=maxf;i++)
    {
        if(c[ci].hs!=i)
        {
            while(d[di].hs==i)di++;
        }
        else
        {
            long long as=ci,bs=di;
            while(c[ci].hs==i)ci++;
            if(d[di].hs!=i)continue;
            while(d[di].hs==i)di++;
            getk(as,bs,ci-1,di-1,cc);
        }
    }
    printf("%lld\n",q+v);
    for(long long i=0;i<n;i++)printf("%lld\n",ans[i]-1);
    return 0;
}
2020/10/10 20:04
加载中...