diff --git a/src/11/24/P1073.cpp b/src/11/24/P1073.cpp new file mode 100644 index 0000000..cf85c15 --- /dev/null +++ b/src/11/24/P1073.cpp @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include +using ll = int64_t; +#define sl static inline +const ll maxn = 100000+7, maxm=500000+7,inf=1e9+7; +ll n,m,p[maxn],maxp[maxn],minp[maxn],ans=-inf; +std::vector> edg,redg; +int main(){ + std::iostream::sync_with_stdio(false); + std::cin.tie(nullptr); + + std::cin>>n>>m; + edg.resize(n+1); + redg=edg; + std::fill(maxp+1,maxp+1+n,-inf); + std::fill(minp+1,minp+1+n,inf); + for(ll i=1;i<=n;i++){ + std::cin>>p[i]; + } + for(ll i=1;i<=m;i++){ + ll x,y,z; + std::cin>>x>>y>>z; + if(z==1){ + edg[x].emplace_back(y); + redg[y].emplace_back(x); + }else{ + edg[x].emplace_back(y); + edg[y].emplace_back(x); + redg[x].emplace_back(y); + redg[y].emplace_back(x); + } + } + + std::queue q; + q.emplace(n); + maxp[n]=p[n]; + while(q.size()){ + ll u=q.front(); + q.pop(); + for(ll v:redg[u]){ + if(maxp[u]<=maxp[v]){ + continue; + } + maxp[v]=std::max(p[v],maxp[u]); + q.emplace(v); + } + } + minp[1]=p[1]; + q.emplace(1); + while(q.size()){ + ll u=q.front(); + q.pop(); + ans=std::max(maxp[u]-minp[u],ans); + for(ll v:edg[u]){ + if(minp[u]>=minp[v]){ + continue; + } + minp[v]=std::min(p[v],minp[u]); + q.emplace(v); + } + } + std::cout< +#include +#include +#include +#include +#include +#include +#include +using ll = int64_t; +#define sl static inline +#define printf +const ll m=10; +ll n,k; +std::vector> v; +std::vector> vis; +const ll dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; +std::vector> mb; + +sl bool find(ll i,ll j){ + printf("--START i=%lld, j=%lld\n",i,j); + mb.clear(); + ll num=1; + std::queue> q; + q.emplace(i,j); + vis[i][j]=true; + char c=v[i][j]; + while(q.size()){ + auto[x,y]=q.front(); + q.pop(); + for(ll k=0;k<4;k++){ + ll nx=x+dir[k][0],ny=y+dir[k][1]; + if(nx<1||nx>n||ny<1||ny>m||c!=v[nx][ny]||vis[nx][ny])continue; + vis[nx][ny]=true; + num++; + q.emplace(nx,ny); + } + if(num>=k){ + v[x][y]='0'; + printf("find x=%lld, y=%lld\n",x,y); + }else{ + mb.emplace_back(x,y); + } + } + if(num>=k){ + for(auto[x,y]:mb){ + v[x][y]='0'; + printf("find x=%lld, y=%lld\n",x,y); + } + mb.clear(); + } + return num>=k; +} + +sl void pm(){ + for(ll i=1;i<=n;i++){ + for(ll j=1;j<=m;j++){ + printf("%c",v[i][j]); + } + printf("\n"); + } + printf("---\n"); +} + +sl void move(){ + for(ll j=1;j<=m;j++){ + ll l=-1; + for(ll i=n;i>=1;i--){ + if(v[i][j]=='0'&&l==-1)l=i; + else if(l!=-1&&v[i][j]!='0'){ + v[l][j]=v[i][j]; + v[i][j]='0'; + l--; + } + } + } +} + +sl bool check(){ + vis.clear(); + vis.resize(n+1); + bool ret=false; + for(ll i=1;i<=n;i++){ + for(ll j=1;j<=m;j++){ + if(v[i][j]!='0'){ + if(find(i,j)){ + pm(); + pm(); + ret=true; + } + } + } + } + move(); + return ret; +} + +int main(){ + std::iostream::sync_with_stdio(false); + std::cin.tie(nullptr); + + std::cin>>n>>k; + v.resize(n+1,std::vector(m+1)); + vis.resize(n+1); + for(ll i=1;i<=n;i++){ + for(ll j=1;j<=m;j++){ + std::cin>>v[i][j]; + } + } + while (check()); + for(ll i=1;i<=n;i++){ + for(ll j=1;j<=m;j++){ + std::cout<