QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#143840#5710. Solar Flightlmeowdn0 0ms13612kbC++143.3kb2023-08-21 14:51:462023-08-21 14:51:52

Judging History

你现在查看的是最新测评结果

  • [2023-08-21 14:51:52]
  • 评测
  • 测评结果:0
  • 用时:0ms
  • 内存:13612kb
  • [2023-08-21 14:51:46]
  • 提交

answer

#include<bits/stdc++.h>
#define fi first
#define se second
#define eb emplace_back
#define mp make_pair
using namespace std;
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
template<typename T,typename U> T ceil(T x, U y) {return (x>0?(x+y-1)/y:x/y);}
template<typename T,typename U> T floor(T x, U y) {return (x>0?x/y:(x-y+1)/y);}
template<class T,class S> bool chmax(T &a,const S b) {return (a<b?a=b,1:0);}
template<class T,class S> bool chmin(T &a,const S b) {return (a>b?a=b,1:0);}
int popcnt(int x) {return __builtin_popcount(x);}
int popcnt(ll x)  {return __builtin_popcountll(x);}
int topbit(int x) {return (x==0?-1:31-__builtin_clz(x));}
int topbit(ll x)  {return (x==0?-1:63-__builtin_clzll(x));}
int lowbit(int x) {return (x==0?-1:__builtin_ctz(x));}
int lowbit(ll x)  {return (x==0?-1:__builtin_ctzll(x));}

#define int long long
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
typedef pair<int,int> pii; 
typedef vector<int> vi;
typedef vector<pii> vp;
int read() {
  int x=0,w=1; char c=getchar(); 
  while(!isdigit(c)) {if(c=='-') w=-1; c=getchar();}
  while(isdigit(c)) {x=x*10+(c-'0'); c=getchar();}
  return x*w;
}

const int N=1e6+5;
const ld inf=1e18,eps=1e-11;
int n,X,k,m,s[N],id[N],tot,ans[N];
deque<pair<int,ld>> d[2005];
struct Line {int a,b,c,id;} a[N];
struct Opt {ld t; int x,y,id;} q[N*3];
bool operator < (const Line &a,const Line &b) {
  return a.a<b.a;
}
bool operator < (const Opt &a,const Opt &b) {
  return a.t==b.t?a.id>b.id:a.t<b.t;
}
void add(int x,int val,ld t) {
  pair<int,ld> s=make_pair(val,inf);
  while(d[x].size()&&d[x].back()<s) d[x].pop_back();
  //cout<<"ADD "<<x<<" "<<val<<" "<<t<<endl;
  if(d[x].size()) {
    pii r=d[x].back(); d[x].pop_back();
    chmin(r.se,t); d[x].push_back(r);
  } d[x].push_back(s);
}

signed main() {
  X=read(), k=read(), n=read(), m=read();
  rep(i,1,n) {
    a[i].a=read(), a[i].b=read();
    a[i].c=read(), a[i].id=i;
  }
  sort(a+1,a+n+1);
  rep(i,1,n) id[a[i].id]=i;
  per(i,n,1) s[i]=s[i+1]+a[i+1].c;
  //rep(i,1,n) cout<<a[i].a<<" "<<a[i].b<<" "<<a[i].c<<endl;
  rep(i,1,n) rep(j,i+1,n) if(a[i].b>a[j].b) {
    ld t=X*(a[j].a-a[i].a)/(a[j].a-a[i].a+a[i].b-a[j].b);
    q[++tot]={t,i,j,0};
    //cout<<"  "<<t<<" "<<i<<" "<<j<<endl;
  }
  rep(i,1,m) {
    int x=read(), y=read();
    q[++tot]={y+k,id[x],0,i};
    //cout<<"  "<<y<<" "<<y+k<<" "<<id[x]<<endl;
  }
  sort(q+1,q+tot+1);
  rep(i,1,n) d[i].push_back(make_pair(s[i],inf));
  rep(i,1,tot) {
    if(!q[i].id) {
      vi used; ld tt=q[i].t;
      static int vst[N];
      while(!q[i].id&&q[i].t==tt) {
        s[q[i].x]-=a[q[i].y].c;
        s[q[i].y]+=a[q[i].x].c;
        if(!vst[q[i].x]) used.eb(q[i].x), vst[q[i].x]=1;
        if(!vst[q[i].y]) used.eb(q[i].y), vst[q[i].y]=1;
        i++;
      }
      //cout<<"MDF "<<tt<<endl;
      for(int x:used) add(x,s[x],tt), vst[x]=0;
      //for(int x:used) cout<<"  "<<x<<" "<<s[x]<<endl;
    }
    while(q[i].id) {
      int st=q[i].t-k, x=q[i].x;
      while(d[x].size()&&d[x][0].se<=st+eps) d[x].pop_front();
      //cout<<"  QRY "<<d[x][0].fi<<" "<<d[x][0].se<<endl;
      ans[q[i].id]=d[x][0].fi;
      i++;
    }
    i--;
  }
  rep(i,1,m) printf("%lld\n",ans[i]);
  return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 13612kb

input:

1000 200 200 1000
657 836 23
962 796 47
497 305 25
837 161 23
220 575 33
697 109 37
401 221 43
883 211 46
727 461 26
681 209 28
413 14 49
664 986 27
431 222 47
307 121 38
638 560 45
801 149 24
878 61 36
761 356 43
839 413 32
931 573 35
218 195 46
201 697 25
951 778 21
705 905 42
861 391 23
582 718 2...

output:

6049
5822
2542
5950
1152
2947
2697
2357
1219
3428
1366
6013
6215
3869
2344
2630
2619
2303
4412
6066
6597
1631
6657
3093
3199
1315
2441
1501
6146
2171
3160
992
2914
4234
692
5058
3132
3283
5036
1702
3169
1024
6614
1568
5133
2224
4032
877
6458
4609
6270
1564
877
3155
2752
3172
6136
4958
2563
3579
6027...

result:

wrong answer 32nd lines differ - expected: '1032', found: '992'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%