Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- using namespace std;
- const int MN = 1000 * 100 + 10;
- struct block {
- int x, y, d;
- block () {};
- block (int xx, int yy, int dd) {
- x = xx, y = yy, d = dd;
- }
- bool operator<(const block &nw) const {
- return (x < nw.x || (x == nw.x && y < nw.y) || (x == nw.x && y == nw.y && d < nw.d));
- }
- bool operator==(const block &nw) const {
- return (x == nw.x && y == nw.y && d == nw.d);
- }
- };
- int arr[MN], n, m;
- int cnt[MN];
- block sp[MN];
- char str[MN];
- bool my_bin(int left, int right, block nw) {
- while (left < right) {
- int mid = (left + right) >> 1;
- if (sp[mid] < nw)
- left = mid + 1;
- else right = mid;
- }
- return sp[right] == nw;
- }
- int main() {
- scanf("%d", &n);
- for(int i = 0; i < n; i ++)
- scanf("%d", &arr[i]);
- scanf("%d", &m);
- for(int i = 0; i < m; i ++)
- scanf("%d%d%d", &sp[i].x, &sp[i].y, &sp[i].d);
- sort(sp, sp + m);
- for(int i = 0; i < n; i ++) {
- for(int j = 49; j >= 0; j --) {
- if (i + j >= n)
- continue;
- block nw(arr[i + j], arr[i], j + 1);
- if (my_bin(0, m - 1, nw)) {
- cnt[i] ++, cnt[i + j] --;
- break;
- }
- }
- }
- for(int i = 0, s = 0; i < n; i ++) {
- if (cnt[i] > 0)
- s += cnt[i];
- if (s > 0)
- str[i] = '1';
- else str[i] = '0';
- if (cnt[i] < 0)
- s += cnt[i];
- }
- printf("%s", str);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement