Submission #506365

#TimeUsernameProblemLanguageResultExecution timeMemory
506365fcmalkcinFurniture (JOI20_furniture)C++17
100 / 100
533 ms60000 KiB
/*#pragma GCC optimize("Ofast") #pragma GCC optimization("unroll-loops, no-stack-protector") #pragma GCC target("avx,avx2,fma")*/ #include <bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll,ll> #define ff first #define ss second #define pb push_back #define endl "\n" #define For(i,a,b) for (ll i=a;i<=b;i++) mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count()); const ll maxn=1e3+200; const ll mod=1e9+7 ; const ll base=3e18; /// you will be the best but now you just are trash /// goal 3/7 ll cnt[maxn][maxn]; ll cnt1[maxn][maxn]; bool dd[maxn][maxn]; ll ax[5]= {0,1,0,-1}; ll ay[5]= {1,0,-1,0}; ll fwt[maxn][maxn][2]; ll a[maxn][maxn]; ll n, m; void update(ll x,ll y,ll t,ll diff) { ll len=(t==0?m:n); for (int i=y; i<=len; i+= i&(-i)) { fwt[x][i][t]+=diff; } } ll get(ll x,ll l,ll r,ll t) { ll ans=0; for (int i=r;i;i-= i&(-i)) { ans+=fwt[x][i][t]; } for (int i=l-1;i;i-= i&(-i)) { ans-=fwt[x][i][t]; } return ans; } void add(ll x,ll y) { if (dd[x][y]) return ; queue<pll> q; q.push(make_pair(x,y)); dd[x][y]=1; while (!q.empty()) { auto p=q.front(); q.pop(); ll x=p.ff; ll y=p.ss; update(x,y,0,-1); update(y,x,1,-1); bool chk=(make_pair(x,y)==make_pair(1ll,3ll)); for (int t=0; t<4; t++) { ll x1=x+ax[t]; ll y1=y+ay[t]; if (x1>=1&&x1<=n&&y1>=1&&y1<=m&&!dd[x1][y1]) { if (t<=1) { cnt[x1][y1]--; if (!cnt[x1][y1]) { dd[x1][y1]=true; q.push(make_pair(x1,y1)); } } else { cnt1[x1][y1]--; if (!cnt1[x1][y1]) { dd[x1][y1]=true; q.push(make_pair(x1,y1)); } } } } } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); if (fopen("t.inp", "r")) { freopen("test.inp", "r", stdin); freopen("test.out", "w", stdout); } cin>> n>> m; for (int i=1; i<=n; i++) { for (int j=1; j<=m; j++) { cin>>a[i][j]; for (int t=0; t<4; t++) { ll x1=i+ax[t]; ll y1=j+ay[t]; if (x1>=1&&x1<=n&&y1>=1&&y1<=m) { if (t<=1) { cnt1[i][j]++; } else { cnt[i][j]++; } } } update(i,j,0,1); update(j,i,1,1); } } for (int i=1; i<=n; i++) { for (int j=1; j<=m; j++) { if (a[i][j]==1) { add(i,j); } } } /* for (int i=1; i<=n; i++) { for (int j=1; j<=m; j++) { cout <<dd[i][j]<<" "; } cout <<endl; }*/ ll q; cin>> q; while (q--) { ll x, y; cin>>x>> y; bool chk=false; if (x+1<=n&&y>=2&&get(x+1,1,y-1,0)) { chk=true; } if (y+1<=m&&x>=2&&get(y+1,1,x-1,1)) { chk=true; } if (chk) { add(x,y); } cout <<chk<<endl; } }

Compilation message (stderr)

furniture.cpp: In function 'void add(long long int, long long int)':
furniture.cpp:69:14: warning: unused variable 'chk' [-Wunused-variable]
   69 |         bool chk=(make_pair(x,y)==make_pair(1ll,3ll));
      |              ^~~
furniture.cpp: In function 'int main()':
furniture.cpp:105:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  105 |         freopen("test.inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
furniture.cpp:106:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  106 |         freopen("test.out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...