Submission #603059

#TimeUsernameProblemLanguageResultExecution timeMemory
603059Koosha_mvSky Walking (IOI19_walk)C++14
10 / 100
4110 ms661616 KiB
#include "walk.h" #include <bits/stdc++.h> using namespace std; #define dbgv(v) cout<<#v<<" = "; f(i,0,int(v.size())) cout<<v[i]<<" "; cout<<endl #define dbga(a,x,y) cout<<#a<<" = "; f(i,x,y) cout<<a[i]<<" "; cout<<endl #define erorp(x) cout<<#x<<"={"<<x.F<<" , "<<x.S<<"}"<<endl #define eror(x) cout<<#x<<'='<<(x)<<endl #define f_(i,a,b) for(int i=a;i>=b;i--) #define f(i,a,b) for(int i=a;i<b;i++) #define nb(x) __builtin_popcount(x) #define all(v) v.begin(),v.end() #define bit(n,k) (((n)>>(k))&1) #define Add(x,y) x=(x+y)%mod #define maxm(a,b) a=max(a,b) #define minm(a,b) a=min(a,b) #define lst(x) x[x.size()-1] #define sz(x) int(x.size()) #define mp make_pair #define ll long long #define pb push_back #define S second #define F first const int N=2e6+99; const ll inf=1e16; int n,m,cnt,seg[N],vis[N]; ll dist[N]; vector<int> a,h,vec; vector<int> V[N]; vector<pair<ll,ll>> g[N]; map<pair<int,int>,int> mark; int get(int x,int y){ if(mark.count(mp(x,y))) return mark[mp(x,y)]; int p=lower_bound(all(a),x)-a.begin(); V[p].pb(y); return mark[mp(x,y)]=++cnt; } void build(int id=1,int l=0,int r=n){ if(l+1==r){ seg[id]=h[l]; return ; } int mid=(l+r)>>1; build(id<<1,l,mid); build(id<<1|1,mid,r); seg[id]=max(seg[id<<1],seg[id<<1|1]); } void get(int L,int R,int val,int id=1,int l=0,int r=n){ if(r<=L || R<=l || seg[id]<val) return ; if(l+1==r){ vec.pb(l); return ; } int mid=(l+r)>>1; get(L,R,val,id<<1,l,mid); get(L,R,val,id<<1|1,mid,r); } ll min_distance(vector<int> _a,vector<int> _h,vector<int> l,vector<int> r,vector<int> y,int S,int T) { a=_a,h=_h; n=a.size(),m=l.size(); build(); get(a[S],0); get(a[T],0); f(i,0,m){ vec.clear(); get(l[i],r[i]+1,y[i]); f(j,1,vec.size()){ int u=get(a[vec[j-1]],y[i]),v=get(a[vec[j]],y[i]); g[u].pb({v,a[vec[j]]-a[vec[j-1]]}); g[v].pb({u,a[vec[j]]-a[vec[j-1]]}); } //dbgv(vec); } f(i,0,n){ sort(all(V[i])); f(j,1,V[i].size()){ int u=get(a[i],V[i][j-1]),v=get(a[i],V[i][j]); g[u].pb({v,V[i][j]-V[i][j-1]}); g[v].pb({u,V[i][j]-V[i][j-1]}); } } set<pair<int,int>> s; f(i,1,cnt+1) dist[i]=inf; dist[get(a[S],0)]=0; f(i,1,cnt+1) s.insert({dist[i],i}); while(s.size()){ int u=(*s.begin()).S; s.erase(*s.begin()); if(u>cnt) assert(0); //if(vis[u]) assert(0); vis[u]=1; for(auto [v,w] : g[u]){ if(w<0) assert(0); if(dist[u]+w<dist[v]){ s.erase({dist[v],v}); dist[v]=dist[u]+w; //if(vis[v]) assert(0); s.insert({dist[v],v}); } } } if(dist[get(a[T],0)]<inf){ return dist[get(a[T],0)]; } else{ return -1; } } /* 5 3 0 6 4 6 5 6 6 6 9 6 3 4 1 1 3 3 0 2 6 0 4 0, 4, 5, 6, 9], [6, 6, 6, 6, 6], [3, 1, 0], [4, 3, 2], [1, 3, 6], 0, 4) */

Compilation message (stderr)

walk.cpp: In function 'long long int min_distance(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, int, int)':
walk.cpp:9:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    9 | #define f(i,a,b) for(int i=a;i<b;i++)
......
   70 |   f(j,1,vec.size()){
      |     ~~~~~~~~~~~~~~             
walk.cpp:70:3: note: in expansion of macro 'f'
   70 |   f(j,1,vec.size()){
      |   ^
walk.cpp:9:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    9 | #define f(i,a,b) for(int i=a;i<b;i++)
......
   79 |   f(j,1,V[i].size()){
      |     ~~~~~~~~~~~~~~~            
walk.cpp:79:3: note: in expansion of macro 'f'
   79 |   f(j,1,V[i].size()){
      |   ^
walk.cpp:95:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   95 |   for(auto [v,w] : g[u]){
      |            ^
#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...