QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#852850#9730. Elevator IIucup-team112#AC ✓334ms36148kbC++2312.9kb2025-01-11 14:24:402025-01-11 14:24:41

Judging History

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

  • [2025-01-11 14:24:41]
  • 评测
  • 测评结果:AC
  • 用时:334ms
  • 内存:36148kb
  • [2025-01-11 14:24:40]
  • 提交

answer


//#define _GLIBCXX_DEBUG

//#pragma GCC target("avx2")
//#pragma GCC optimize("O3")
//#pragma GCC optimize("unroll-loops")

#include<bits/stdc++.h>
using namespace std;


#ifdef LOCAL
#include <debug_print.hpp>
#define OUT(...) debug_print::multi_print(#__VA_ARGS__, __VA_ARGS__)
#else
#define OUT(...) (static_cast<void>(0))
#endif

#define endl '\n'
#define lfs cout<<fixed<<setprecision(15)
#define ALL(a)  (a).begin(),(a).end()
#define ALLR(a)  (a).rbegin(),(a).rend()
#define UNIQUE(a) (a).erase(unique((a).begin(),(a).end()),(a).end())
#define spa << " " <<
#define fi first
#define se second
#define MP make_pair
#define MT make_tuple
#define PB push_back
#define EB emplace_back
#define rep(i,n,m) for(ll i = (n); i < (ll)(m); i++)
#define rrep(i,n,m) for(ll i = (ll)(m) - 1; i >= (ll)(n); i--)

namespace template_tute{
  using ll = long long;
  using ld = long double;
  const ll MOD1 = 1e9+7;
  const ll MOD9 = 998244353;
  const ll INF = 4.1e18;
  using P = pair<ll, ll>;
  template<typename T> using PQ = priority_queue<T>;
  template<typename T> using QP = priority_queue<T,vector<T>,greater<T>>;
  template<typename T1, typename T2>bool chmin(T1 &a,T2 b){if(a>b){a=b;return true;}else return false;}
  template<typename T1, typename T2>bool chmax(T1 &a,T2 b){if(a<b){a=b;return true;}else return false;}
  ll median(ll a,ll b, ll c){return a+b+c-max<ll>({a,b,c})-min<ll>({a,b,c});}
  void ans1(bool x){if(x) cout<<"Yes"<<endl;else cout<<"No"<<endl;}
  void ans2(bool x){if(x) cout<<"YES"<<endl;else cout<<"NO"<<endl;}
  void ans3(bool x){if(x) cout<<"Yay!"<<endl;else cout<<":("<<endl;}
  template<typename T1,typename T2>void ans(bool x,T1 y,T2 z){if(x)cout<<y<<endl;else cout<<z<<endl;}  
  template<typename T1,typename T2,typename T3>void anss(T1 x,T2 y,T3 z){ans(x!=y,x,z);};  
  template<typename T>void debug(const T &v,ll h,ll w,string sv=" "){for(ll i=0;i<h;i++){cout<<v[i][0];for(ll j=1;j<w;j++)cout<<sv<<v[i][j];cout<<endl;}};
  template<typename T>void debug(const T &v,ll n,string sv=" "){if(n!=0)cout<<v[0];for(ll i=1;i<n;i++)cout<<sv<<v[i];cout<<endl;};
  template<typename T>void debug(const vector<T>&v){debug(v,v.size());}
  template<typename T>void debug(const vector<vector<T>>&v){for(auto &vv:v)debug(vv,vv.size());}
  template<typename T>void debug(stack<T> st){while(!st.empty()){cout<<st.top()<<" ";st.pop();}cout<<endl;}
  template<typename T>void debug(queue<T> st){while(!st.empty()){cout<<st.front()<<" ";st.pop();}cout<<endl;}
  template<typename T>void debug(deque<T> st){while(!st.empty()){cout<<st.front()<<" ";st.pop_front();}cout<<endl;}
  template<typename T>void debug(PQ<T> st){while(!st.empty()){cout<<st.top()<<" ";st.pop();}cout<<endl;}
  template<typename T>void debug(QP<T> st){while(!st.empty()){cout<<st.top()<<" ";st.pop();}cout<<endl;}
  template<typename T>void debug(const set<T>&v){for(auto z:v)cout<<z<<" ";cout<<endl;}
  template<typename T>void debug(const multiset<T>&v){for(auto z:v)cout<<z<<" ";cout<<endl;}
  template<typename T,size_t size>void debug(const array<T, size> &a){for(auto z:a)cout<<z<<" ";cout<<endl;}
  template<typename T,typename V>void debug(const map<T,V>&v){for(auto z:v)cout<<"["<<z.first<<"]="<<z.second<<",";cout<<endl;}
  template<typename T>vector<vector<T>>vec(ll x, ll y, T w){vector<vector<T>>v(x,vector<T>(y,w));return v;}
  vector<ll>dx={1,-1,0,0,1,1,-1,-1};vector<ll>dy={0,0,1,-1,1,-1,1,-1};
  template<typename T>vector<T> make_v(size_t a,T b){return vector<T>(a,b);}
  template<typename... Ts>auto make_v(size_t a,Ts... ts){return vector<decltype(make_v(ts...))>(a,make_v(ts...));}
  template<typename T1, typename T2>ostream &operator<<(ostream &os, const pair<T1, T2>&p){return os << "(" << p.first << "," << p.second << ")";}
  template<typename T>ostream &operator<<(ostream &os, const vector<T> &v){os<<"[";for(auto &z:v)os << z << ",";os<<"]"; return os;}
  template<typename T>void rearrange(vector<int>&ord, vector<T>&v){
    auto tmp = v;
    for(int i=0;i<tmp.size();i++)v[i] = tmp[ord[i]];
  }
  template<typename Head, typename... Tail>void rearrange(vector<int>&ord,Head&& head, Tail&&... tail){
    rearrange(ord, head);
    rearrange(ord, tail...);
  }
  template<typename T> vector<int> ascend(const vector<T>&v){
    vector<int>ord(v.size());iota(ord.begin(),ord.end(),0);
    sort(ord.begin(),ord.end(),[&](int i,int j){return make_pair(v[i],i)<make_pair(v[j],j);});
    return ord;
  }
  template<typename T> vector<int> descend(const vector<T>&v){
    vector<int>ord(v.size());iota(ord.begin(),ord.end(),0);
    sort(ord.begin(),ord.end(),[&](int i,int j){return make_pair(v[i],-i)>make_pair(v[j],-j);});
    return ord;
  }
  template<typename T> vector<T> inv_perm(const vector<T>&ord){
    vector<T>inv(ord.size());
    for(int i=0;i<ord.size();i++)inv[ord[i]] = i;
    return inv;
  }
  ll FLOOR(ll n,ll div){assert(div>0);return n>=0?n/div:(n-div+1)/div;}
  ll CEIL(ll n,ll div){assert(div>0);return n>=0?(n+div-1)/div:n/div;}
  ll digitsum(ll n){ll ret=0;while(n){ret+=n%10;n/=10;}return ret;}
  ll modulo(ll n,ll d){return (n%d+d)%d;};
  template<typename T>T min(const vector<T>&v){return *min_element(v.begin(),v.end());}
  template<typename T>T max(const vector<T>&v){return *max_element(v.begin(),v.end());}
  template<typename T>T acc(const vector<T>&v){return accumulate(v.begin(),v.end(),T(0));};
  template<typename T>T reverse(const T &v){return T(v.rbegin(),v.rend());};
  //mt19937 mt(chrono::steady_clock::now().time_since_epoch().count());
  int popcount(ll x){return __builtin_popcountll(x);};
  int poplow(ll x){return __builtin_ctzll(x);};
  int pophigh(ll x){return 63 - __builtin_clzll(x);};
  template<typename T>T poll(queue<T> &q){auto ret=q.front();q.pop();return ret;};
  template<typename T>T poll(priority_queue<T> &q){auto ret=q.top();q.pop();return ret;};
  template<typename T>T poll(QP<T> &q){auto ret=q.top();q.pop();return ret;};
  template<typename T>T poll(stack<T> &s){auto ret=s.top();s.pop();return ret;};
  ll MULT(ll x,ll y){if(LLONG_MAX/x<=y)return LLONG_MAX;return x*y;}
  ll POW2(ll x, ll k){ll ret=1,mul=x;while(k){if(mul==LLONG_MAX)return LLONG_MAX;if(k&1)ret=MULT(ret,mul);mul=MULT(mul,mul);k>>=1;}return ret;}
  ll POW(ll x, ll k){ll ret=1;for(int i=0;i<k;i++){if(LLONG_MAX/x<=ret)return LLONG_MAX;ret*=x;}return ret;}
  std::ostream &operator<<(std::ostream &dest, __int128_t value) {
    std::ostream::sentry s(dest);
    if (s) {
      __uint128_t tmp = value < 0 ? -value : value;
      char buffer[128];
      char *d = std::end(buffer);
      do {
        --d;
        *d = "0123456789"[tmp % 10];
        tmp /= 10;
      } while (tmp != 0);
      if (value < 0) {
        --d;
        *d = '-';
      }
      int len = std::end(buffer) - d;
      if (dest.rdbuf()->sputn(d, len) != len) {
        dest.setstate(std::ios_base::badbit);
      }
    }
    return dest;
  }
  namespace converter{
    int dict[500];
    const string lower="abcdefghijklmnopqrstuvwxyz";
    const string upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    const string digit="0123456789";
    const string digit1="123456789";
    void regi_str(const string &t){
      for(int i=0;i<t.size();i++){
        dict[t[i]]=i;
      }
    }
    void regi_int(const string &t){
      for(int i=0;i<t.size();i++){
        dict[i]=t[i];
      }
    }
    vector<int>to_int(const string &s,const string &t){
      regi_str(t);
      vector<int>ret(s.size());
      for(int i=0;i<s.size();i++){
        ret[i]=dict[s[i]];
      }
      return ret;
    }
    vector<int>to_int(const string &s){
      auto t=s;
      sort(t.begin(),t.end());
      t.erase(unique(t.begin(),t.end()),t.end());
      return to_int(s,t);
    }
    
    vector<vector<int>>to_int(const vector<string>&s,const string &t){
      regi_str(t);
      vector<vector<int>>ret(s.size(),vector<int>(s[0].size()));
      for(int i=0;i<s.size();i++){
        for(int j=0;j<s[0].size();j++){
          ret[i][j]=dict[s[i][j]];
        }
      }
      return ret;
    }
    vector<vector<int>>to_int(const vector<string>&s){
      string t;
      for(int i=0;i<s.size();i++){
        t+=s[i];
      }
      sort(t.begin(),t.end());t.erase(unique(t.begin(),t.end()),t.end());
      return to_int(s,t);
    }
    string to_str(const vector<int>&s,const string &t){
      regi_int(t);
      string ret;
      for(auto z:s)ret+=dict[z];
      return ret;
    }
    vector<string> to_str(const vector<vector<int>>&s,const string &t){
      regi_int(t);
      vector<string>ret(s.size());
      for(int i=0;i<s.size();i++){
        for(auto z:s[i])ret[i]+=dict[z];
      }
      return ret;
    }
  }
  template< typename T = int >
  struct edge {
    int to;
    T cost;
    int id;
    edge():to(-1),id(-1){};
    edge(int to, T cost = 1, int id = -1):to(to), cost(cost), id(id){}
    operator int() const { return to; }
  };

  template<typename T>
  using Graph = vector<vector<edge<T>>>;
  template<typename T>
  Graph<T>revgraph(const Graph<T> &g){
    Graph<T>ret(g.size());
    for(int i=0;i<g.size();i++){
      for(auto e:g[i]){
        int to = e.to;
        e.to = i;
        ret[to].push_back(e);
      }
    }
    return ret;
  }
  template<typename T>
  Graph<T> readGraph(int n,int m,int indexed=1,bool directed=false,bool weighted=false){
    Graph<T> ret(n);
    for(int es = 0; es < m; es++){
      int u,v;
      T w=1;
      cin>>u>>v;u-=indexed,v-=indexed;
      if(weighted)cin>>w;
      ret[u].emplace_back(v,w,es);
      if(!directed)ret[v].emplace_back(u,w,es);
    }
    return ret;
  }
  template<typename T>
  Graph<T> readParent(int n,int indexed=1,bool directed=true){
    Graph<T>ret(n);
    for(int i=1;i<n;i++){
      int p;cin>>p;
      p-=indexed;
      ret[p].emplace_back(i);
      if(!directed)ret[i].emplace_back(p);
    }
    return ret;
  }
}
using namespace template_tute;

template<typename G>
vector<P> dijkstra(G &g,const vector<int>&s) {
  using PT=pair<ll,int>;
  priority_queue<PT, vector<PT>, greater<PT> > que;
  vector<ll>dist(g.size(),INF);
  for(auto v:s){
    dist[v] = 0;
    que.emplace(0, v);
  }
  vector<P>from(g.size(),MP(-1,-1));
  while (!que.empty()) {
    PT p = que.top();
    que.pop();
    int v = p.second;
    if (dist[v] < p.first) continue;
    for(auto e:g[v]) {
      if (dist[e.to] > dist[v] + e.cost) {
          dist[e.to] = dist[v] + e.cost;
          from[e.to] = MP(v,e.id);
          que.emplace(dist[e.to], e.to);
      }
    }
  }
  return from;
}
template<typename G>
vector<P>dijkstra(G &g,int s=0){
  return dijkstra(g,vector<int>(1,s));
}

template<typename T>
struct Compress{
  vector<T>v;
  Compress(){
  }
  Compress(const vector<T>&input){
    add(input);
    build();
  }
  template<typename... Args>
  Compress(const vector<T> &head,const Args& ...input){
    add(head, input...);
    build();
  }
  template<typename... Args>
  Compress(const T &head,const Args& ...input){
    add(head, input...);
    build();
  }
  void build(){
    sort(v.begin(), v.end());
    v.erase(unique(v.begin(),v.end()),v.end());
  }
  void add(const vector<T>&add){
    v.insert(v.end(),add.begin(), add.end());
  }
  template<typename Head, typename ...Tail>
  void add(const Head& head,const Tail& ...tail){
    add(head);
    add(tail...);
  }
  void add(T val){
    v.push_back(val);
  }
  int next(T val){
    return lower_bound(v.begin(), v.end(), val) - v.begin();
  }
  int prev(T val){
    return upper_bound(v.begin(), v.end(), val) - v.begin() - 1;
  }
  bool exist(T val){
    return binary_search(v.begin(), v.end(), val);
  }
  T val(int x){
    return v[x];
  }
  vector<int>compress(const vector<T>&input){
    vector<int>ret(input.size());
    for(int i=0;i<input.size();i++)ret[i]=next(input[i]);
    return ret;
  }
  int operator[](T val){
    return next(val);
  }
  int size(){
    return v.size();
  }
};

void solve(){
	ll res=0,buf=0;
  bool judge = true;

  ll n,f;cin>>n>>f;
  vector<ll>l(n),r(n);
  rep(i,0,n){
    cin>>l[i]>>r[i];
  }
  Compress<ll>mp(l,r);
  mp.add(f);
  mp.build();
  ll sz=mp.size();
  Graph<ll>g(sz);
  rep(i,0,n){
    g[mp[l[i]]].emplace_back(mp[r[i]],0,i);
  }
  rep(i,0,sz-1){
    g[i].EB(i+1,mp.val(i+1)-mp.val(i),-1);
    g[i+1].EB(i,0,-1);
  }
  auto from=dijkstra(g,mp[f]);
  ll now=sz-1;
  vector<ll>ret;
  vector<bool>used(n);
  while(now!=mp[f]){
    auto [p,id]=from[now];
    if(id!=-1){
      ret.PB(id);
      used[id]=true;
    }
    now=p;
  }
  reverse(ALL(ret));
  auto ord=descend(l);
  for(auto i:ord){
    if(!used[i]){
      ret.PB(i);
    }
  }
  ll sum=0,pos=f;
  for(auto &i:ret){
    sum+=max(0LL,l[i]-pos);
    pos=r[i];
    sum+=r[i]-l[i];
    i+=1;
  }
  cout<<sum<<endl;
  debug(ret);
}

int main(){
  cin.tie(nullptr);
  ios_base::sync_with_stdio(false);
  ll res=0,buf=0;
  bool judge = true;
  int T = 1;
  cin>>T;
  while(T--){
    solve();
  }
  return 0;
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3592kb

input:

2
4 2
3 6
1 3
2 7
5 6
2 5
2 4
6 8

output:

11
3 4 1 2
5
2 1

result:

ok ok 2 cases (2 test cases)

Test #2:

score: 0
Accepted
time: 130ms
memory: 3912kb

input:

6100
19 52
51 98
2 83
40 58
96 99
39 55
72 94
15 17
4 15
48 99
2 99
77 78
35 77
44 62
79 81
30 31
1 48
48 76
68 99
60 66
6 19
44 53
64 92
17 28
67 98
9 99
40 65
16 27
99 100
15 56
4 6
24 97
84 96
47 49
37 38
77 79
13 40
13 92
71 100
47 93
90 91
72 81
15 48
32 71
19 17
95 99
10 23
18 100
90 93
52 92
...

output:

524
9 4 14 11 6 18 19 1 17 13 3 5 12 15 7 8 2 10 16
194
5 4 2 1 6 3
397
9 16 11 1 13 5 8 14 6 12 7 4 2 15 10 3
733
2 3 1 4 17 8 16 5 12 10 19 13 14 6 11 7 18 9 15
244
3 2 8 12 4 6 5 14 10 11 1 15 9 13 7
422
18 11 10 6 7 2 13 4 20 8 5 9 15 16 14 1 19 3 12 17
104
4 1 3 2
187
4 8 2 3 1 5 6 9 10 7
117
2...

result:

ok ok 6100 cases (6100 test cases)

Test #3:

score: 0
Accepted
time: 334ms
memory: 35040kb

input:

3
100000 9859
150464 951410
637107 897197
236268 936879
353406 403927
511229 999416
861211 958428
186246 446149
162388 805753
449016 817386
147119 604340
579101 926848
958992 987299
859662 907007
507058 690951
719158 856587
789149 927957
691705 707085
694110 845505
192759 616586
905489 935507
937041...

output:

24903933702
65694 46382 65801 72396 12929 65474 13509 51617 64518 1391 17116 69859 94976 86643 52272 9868 78418 75539 36677 50759 70692 43527 59278 99948 47680 41692 64055 27729 7685 22139 91293 15697 79107 7904 25422 23408 55091 95233 84324 21636 79982 89542 15727 76200 43858 39420 72798 12550 7086...

result:

ok ok 3 cases (3 test cases)

Test #4:

score: 0
Accepted
time: 245ms
memory: 30860kb

input:

3
100000 932101
80818 80823
538842 538844
406812 406818
625053 625054
511066 511073
667363 667365
527022 527023
621329 621331
855832 855852
796168 796169
268927 268929
650891 650895
312793 312794
873256 873260
424896 424929
266271 266272
902201 902209
842863 842864
361599 361610
647851 647855
148132...

output:

986597
82641 30352 11990 41160 74602 95031 10872 13641 70364 69688 83583 94175 77157 82305 60601 21546 21059 98950 61273 85593 9311 25865 48329 29951 79449 26301 33491 96045 59186 37084 58554 99074 38280 78061 69175 87674 26606 30169 81023 72809 11035 22681 57154 73949 1545 46747 26464 25497 57020 3...

result:

ok ok 3 cases (3 test cases)

Test #5:

score: 0
Accepted
time: 263ms
memory: 36148kb

input:

3
100000 375117879
637628712 637644704
788784579 788792294
804734775 804734822
332639566 332642798
143113598 143114045
132119073 132122341
684483097 684513821
484676670 484678332
661667340 661668818
777865379 777870254
142495696 142495995
101735856 101740588
906481102 906481965
360087766 360091064
1...

output:

872643717
43549 34676 31878 49124 12077 8140 13605 76831 10834 96613 83688 46028 65944 14511 56152 84791 1759 60404 73244 38124 93732 74294 8688 64153 56500 39213 27938 93350 21680 36926 8295 8832 69685 1025 22233 14796 83881 83105 72820 95432 90168 29163 20496 4937 51441 96515 46657 82775 90528 380...

result:

ok ok 3 cases (3 test cases)

Extra Test:

score: 0
Extra Test Passed