Submission #1278647

#TimeUsernameProblemLanguageResultExecution timeMemory
1278647sasdePassport (JOI23_passport)C++20
100 / 100
378 ms81944 KiB
#include<bits/stdc++.h>
using namespace std;
bool M1;
#define PI 3.14159265358979323846
#define sz(a) (int)a.size()
#define all(x) x.begin(),x.end()
#define ii pair<int,int>
#define iii pair<int,ii>
#define iv pair<ii,ii>
#define se second
#define fi first
#define ffi fi.fi
#define sfi se.fi
#define sse se.se
#define fse fi.se
#define lt(i, c, d) for(int i = c; i <= d; ++i)
#define fl(i, c, d) for(int i = d; i >= c; --i)
#define pb push_back
#define emb emplace_back
#define emf emplace_front
#define em emplace
#define look_memory cerr<<abs(&M2-&M1)/1024.0/1024<<'\n'
#define look_time   cerr << "TIME : " << clock() * 0.001 << "s" <<'\n'
const int N=1e6+5,lg=30,mod=1e9+7,inf=1e9;
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
int Rand(int u,int v){
 return u+rd()%(v-u+1);
}
int dx[]={1,0,-1,0,1,1,-1,-1};
int dy[]={0,-1,0,1,1,-1,1,-1};
struct pt{
    int l,r,i;
}a[N];
int node,ans[N],val[N];
vector<ii>ver[N];

struct segmax {
    int n;
    vector<int> st, lazy;
    segmax() {};
    segmax(int _n): n(_n), st(n * 4 + 5, 0), lazy(n * 4 + 5, 0) {};

    void build(int id, int l, int r) {
        if (l == r) {
            val[l]=id;
            return;
        }
        int mid = (l + r) >> 1;
        build(id << 1, l, mid);
        build(id << 1 | 1, mid + 1, r);
        ver[id<<1|1].emb(id,0);
        ver[id<<1].emb(id,0);
    }
    void update(int id, int l, int r, int u,int v, int value) {
        if (u>r||v<l) return;
        if (u<=l&&r<=v) {
            ver[id].emb(value,1);
            return;
        }
        int mid = (l + r) >> 1;
        update(id << 1, l, mid, u,v, value);
        update(id << 1 | 1, mid + 1, r, u,v, value);
    }
};
int dist[N][2];
void bfs(int t){
    for(int i=1;i<=node*4;++i)dist[i][t]=inf;
    dist[val[t==0?1:node]][t]=0;
    deque<int>p;
    p.emf(val[t==0?1:node]);
    while(!p.empty()){
        int u=p.front();
        // cout <<u<<" "<<t<<'\n';
        p.pop_front();
        for(auto x:ver[u]){
            if(dist[x.fi][t]>dist[u][t]+x.se){
                dist[x.fi][t]=dist[u][t]+x.se;
                if(x.se==0)
                    p.emf(x.fi);
                else p.emb(x.fi);
            }
        }
    }
}
void dijk(){
    for(int i=1;i<=node*4;++i)ans[i]=inf;
        priority_queue<ii,vector<ii>,greater<ii>>p;
    for(int i=1;i<=node;++i){
        ans[val[i]]=dist[val[i]][0]+dist[val[i]][1]-(i!=1&&i!=node);
        p.em(ans[val[i]],val[i]);
    }
    while(!p.empty()){
        ii x=p.top();
        // cout <<x.fi<<" "<<x.se<<'\n';
        p.pop();
        if(x.fi!=ans[x.se])continue;
        for(auto v:ver[x.se]){
            if(ans[v.fi]>x.fi+v.se){
                ans[v.fi]=x.fi+v.se;
                p.em(ans[v.fi],v.fi);
            }
        }
    }
}
bool M2;
void solve(){
    cin >> node;
    segmax seg(node);
    seg.build(1,1,node);
    for(int i=1;i<=node;++i){
        cin >> a[i].l >> a[i].r;
        a[i].i=i;
        seg.update(1,1,node,a[i].l,a[i].r,val[i]);
        // cout << a[i].l<<" "<<a[i].r<<'\n';
    }
    bfs(0);
    bfs(1);
    dijk();
    int query;
    cin >> query;
    while(query--){
        int x;
        cin >> x;
        if(ans[val[x]]>=node)ans[val[x]]=-1;
        cout << ans[val[x]]<<'\n';
    }
    // cout <<1;
}
main()
{
  srand(time(0));
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    #define task "aws"
    if(fopen(task".inp","r")){
      freopen(task".inp","r",stdin);
      freopen(task".out","w",stdout);
    }
    int t=1;
 //   cin >> t;
while(t--){
    solve();
}
look_memory;
look_time;
}

Compilation message (stderr)

passport.cpp:129:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  129 | main()
      | ^~~~
passport.cpp: In function 'int main()':
passport.cpp:137:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  137 |       freopen(task".inp","r",stdin);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
passport.cpp:138:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  138 |       freopen(task".out","w",stdout);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...