Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N=1010;
- const int INF=987654321;
- set<int> row[N];
- int n, m, q;
- char s[N];
- int aps (int x)
- {
- if (x<0) return -x;
- return x;
- }
- int ok (int a, int b, int r, int c)
- {
- int dr=aps(a-r);
- int dc=aps(b-c);
- int d=min(dr, dc);
- return (dr+dc-d);
- }
- void solve (int r, int c)
- {
- int ret=INF, red, kol;
- for (int i=1;i<=n;i++)
- {
- if (row[i].empty()) continue;
- auto it=row[i].upper_bound(c);
- if (it==row[i].end()) it--;
- int cur=ok(r, c, i, *it);
- if (cur<ret)
- {
- ret=cur;
- red=i;
- kol=*it;
- }
- if (it!=row[i].begin()) it--;
- cur=ok(r, c, i, *it);
- if (cur<ret)
- {
- ret=cur;
- red=i;
- kol=*it;
- }
- }
- if (ret==INF) printf ("-1\n");
- else printf ("%d %d\n", red, kol);
- }
- int main()
- {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- scanf ("%d%d", &n, &m);
- for (int i=1;i<=n;i++)
- {
- scanf ("%s", s+1);
- for (int j=1;j<=m;j++)
- {
- if (s[j]=='1') row[i].insert(j);
- }
- }
- scanf ("%d", &q);
- while (q--)
- {
- int com, r, c;
- scanf ("%d%d%d", &com, &r, &c);
- if (com==1) row[r].insert(c);
- else if (com==2) row[r].erase(c);
- else solve (r, c);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment