1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| #include<bits/stdc++.h> #define Tp template<typename Ty> #define Ts template<typename Ty,typename... Ar> #define W while #define I inline #define RI register int #define LL long long #define Cn const #define CI Cn int& #define gc getchar #define D isdigit(c=gc()) #define pc(c) putchar((c)) #define min(x,y) ((x)<(y)?(x):(y)) #define max(x,y) ((x)>(y)?(x):(y)) using namespace std; namespace Debug{ Tp I void _debug(Cn char* f,Ty t){cerr<<f<<'='<<t<<endl;} Ts I void _debug(Cn char* f,Ty x,Ar... y){W(*f!=',') cerr<<*f++;cerr<<'='<<x<<",";_debug(f+1,y...);} Tp ostream& operator<<(ostream& os,Cn vector<Ty>& V){os<<"[";for(Cn auto& vv:V) os<<vv<<",";os<<"]";return os;} #define gdb(...) _debug(#__VA_ARGS__,__VA_ARGS__) }using namespace Debug; namespace FastIO{ Tp I void read(Ty& x){char c;int f=1;x=0;W(!D) f=c^'-'?1:-1;W(x=(x<<3)+(x<<1)+(c&15),D);x*=f;} Ts I void read(Ty& x,Ar&... y){read(x),read(y...);} Tp I void write(Ty x){x<0&&(pc('-'),x=-x,0),x<10?(pc(x+'0'),0):(write(x/10),pc(x%10+'0'),0);} Tp I void writeln(Cn Ty& x){write(x),pc('\n');} }using namespace FastIO; Cn int N=2e3+10,M=55,R=N*M,E=N*M*M; int n,m,S,T,TT,Q,cnt,G[M][N],fir[R],nxt[E<<1],son[E<<1],w[E<<1],cost[E<<1],tot=1,Ans,Cost,F[R],C[R],P[R],vis[R],inf=2e9,ans[M],ID,id[M][N]; #define PA pair<int,int> #define MP make_pair #define fi first #define se second PA b[N]; I bool cmp(Cn PA& x,Cn PA& y){return x.se<y.se;} I void Add(CI x,CI y,CI z,CI c){nxt[++tot]=fir[x],fir[x]=tot,son[tot]=y,w[tot]=z,cost[tot]=c;nxt[++tot]=fir[y],fir[y]=tot,son[tot]=x,w[tot]=0,cost[tot]=-c;} deque<int> q; #define to son[i] I bool bfs(){ RI u,i;W(!q.empty()) q.pop_front();q.push_front(S);memset(C,63,sizeof(C)),memset(vis,0,sizeof(vis));F[S]=inf=C[0];C[S]=0;W(!q.empty()) for(i=fir[vis[u=q.front()]=0,u],q.pop_front();i;i=nxt[i]) if(w[i]>0&&C[to]>C[u]+cost[i]) C[to]=C[u]+cost[P[to]=i],F[to]=min(F[u],w[i]),!vis[to]&&(q.empty()?q.push_front(to),0:(C[to]>C[q.front()]?q.push_back(to):q.push_front(to),0),vis[to]=1); return C[T]<inf; } I void MCMF(){ RI i;W(bfs()){ for(i=T;i^S;i=son[P[i]^1]) w[P[i]]-=F[T],w[P[i]^1]+=F[T]; Ans+=F[T];Cost+=F[T]*C[T]; }return ; } #define idx(i,j) id[i][j] int main(){ RI i,j,k,x;for(read(n,m,TT,Q),i=1;i<=TT;i++) read(b[i].fi,b[i].se);sort(b+1,b+TT+1,cmp); for(i=1;i<=TT;i++) b[i-1].se+2<=b[i].se&&cnt++,b[i-1].se<b[i].se&&cnt++,G[b[i].fi][cnt]=1; for(i=1;i<=n;i++) for(j=1;j<=cnt;j++) if(!G[i][j]&&!G[i][j-1]&&j>1) id[i][j]=id[i][j-1];else id[i][j]=++ID; for(S=++ID,T=++ID,S<<=1,T<<=1,i=1;i<=n;i++) for(j=1;j<cnt;j++){ k=i-1;W(k>=1&&G[i][j+1]&&!G[i][j]&&!G[k][j]) !G[k][j+1]&&(Add(idx(i,j)<<11,idx(k,j+1)<<1,1,abs(i-k)),0),k--; k=i+1;W(k<=n&&G[i][j+1]&&!G[i][j]&&!G[k][j]) !G[k][j+1]&&(Add(idx(i,j)<<11,idx(k,j+1)<<1,1,abs(i-k)),0),k++; }for(i=1;i<=ID-2;i++) Add(i<<1,i<<11,1,0); for(i=1;i<=n;i++) if(!G[i][1]) Add(0,idx(i,1)<<1,1,0); for(i=1;i<=n;i++) if(!G[i][cnt]) Add(idx(i,cnt)<<11,T,1,0); for(i=1;i<=n;i++) if(Add(S,0,1,0),MCMF(),Ans==i) ans[i]=Cost;else n=i-1; for(i=1;i<=Q;i++){for(read(x),j=n;~j;j--) if(ans[j]<=x) break ;writeln(j);}return 0; }
|