#include <bits/stdc++.h>
//#define int long long
#define ii pair<int,int>
#define F first
#define S second
#define du long double
using namespace std;
int n,m;
const int N=2e5+10;
vector<int> idx[N];
int p[N];
set<int> st[N];
int a[N];
int x[]={0,0,1,-1};
int y[]={1,-1,0,0};
vector<int> vec;
bool out(int i,int j)
{
//cout<<i<<" "<<j<<endl;
bool ans=i<1||j<1||i>n||j>m;
return ans;
}
int find(int u)
{
if(u==p[u])return u;
return p[u]=find(p[u]);
}
void compine(int u,int v)
{
u=find(u);
v=find(v);
if(u==v)return;
if(st[u].size()>st[v].size()){
swap(u,v);
}
for(auto x:st[u]){
st[v].insert(x);
}
st[v].erase(u);
p[u]=v;
}
void fix()
{
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int x=idx[i][j];
x=find(x);
x=a[x];
printf("%d ",x);
}
printf("\n");
}
/* cout<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int x=idx[i][j];
x=find(x);
cout<<x<<" ";
}
cout<<endl;
}
*/
}
void solve()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
idx[i].resize(m+10);
}
int cnt=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cnt++;
p[cnt]=cnt;
idx[i][j]=cnt;
scanf("%d",&a[cnt]);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
vec.clear();
int u=idx[i][j];
int c=a[u];
u=find(u);
for(int k=0;k<4;k++){
int ni=i+x[k];
int nj=j+y[k];
if(out(ni,nj))continue;
int v=idx[ni][nj];
int nc=a[v];
if(c==nc){
vec.push_back(v);
}
else{
st[u].insert(v);
}
}
for(auto x:vec){
// cout<<x<<endl;
compine(u,x);
}
}
}
int q;
cin>>q;
while(q--){
// cout<<"\n\n";
// fix();
// cout<<"\n\n";
int c,i,j;
cin>>i>>j>>c;
int u=idx[i][j];
u=find(u);
a[u]=c;
vec.clear();
for(auto x:st[u]){
int xx=find(x);
// cout<<x<<" ";
if(a[xx]==c)vec.push_back(xx);
}
// cout<<endl;
for(auto x:vec){
compine(u,x);
}
}
fix();
}
main()
{
//freopen(".in","r",stdin);freopen(".out","w",stdout);
int t=1;
// cin>>t;
while(t--)solve();
}
Compilation message
paint.cpp:132:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
132 | main()
| ^
paint.cpp: In function 'void solve()':
paint.cpp:76:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
76 | scanf("%d",&a[cnt]);
| ~~~~~^~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
14536 KB |
Output is correct |
2 |
Correct |
12 ms |
14544 KB |
Output is correct |
3 |
Correct |
18 ms |
16344 KB |
Output is correct |
4 |
Correct |
23 ms |
16204 KB |
Output is correct |
5 |
Correct |
413 ms |
16080 KB |
Output is correct |
6 |
Correct |
710 ms |
16308 KB |
Output is correct |
7 |
Correct |
10 ms |
14284 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
137 ms |
20252 KB |
Output is correct |
2 |
Correct |
500 ms |
31228 KB |
Output is correct |
3 |
Execution timed out |
3081 ms |
28040 KB |
Time limit exceeded |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
3080 ms |
63304 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
396 ms |
48008 KB |
Output is correct |
2 |
Execution timed out |
3069 ms |
43916 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |