Submission #55195

# Submission time Handle Problem Language Result Execution time Memory
55195 2018-07-06T09:47:14 Z 강태규(#1525) None (JOI14_ho_t5) C++11
0 / 100
368 ms 8100 KB
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <unordered_map>
#include <functional>
#include <cstring>
#include <cmath>
#include <ctime>
#include <cstdlib>

using namespace std;
typedef long long llong;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<llong, llong> pll;

int w, h, n;
vector<int> compx, compy;
struct line {
    int x1, x2, y;
    bool operator<(const line &p) const {
        return y < p.y;
    }
    void compress(const vector<int> &cx, const vector<int> &cy) {
        x1 = lower_bound(cx.begin(), cx.end(), x1) - cx.begin() + 1;
        x2 = lower_bound(cx.begin(), cx.end(), x2) - cx.begin() + 1;
        y = lower_bound(cy.begin(), cy.end(), y) - cy.begin() + 1;
    }
};

struct event {
    int x, y, c;
    bool operator<(const event &p) const {
        return y < p.y;
    }
};

int seg[1 << 19];
void update(int i, int s, int e, int x, int v) {
    if (s == e) {
        seg[i] += v;
        return;
    }
    int m = (s + e) / 2;
    if (x <= m) update(i << 1, s, m, x, v);
    else update(i << 1 | 1, m + 1, e, x, v);
    seg[i] = seg[i << 1] + seg[i << 1 | 1];
}

int query(int i, int s, int e, int x, int y) {
    if (e < x || y < s) return 0;
    if (x <= s && e <= y) return seg[i];
    int m = (s + e) / 2;
    return query(i << 1, s, m, x, y) + query(i << 1 | 1, m + 1, e, x, y);
}

pll getVertexEdges(int mx, const vector<line>& ls, const vector<line>& le) {
    llong v = 0, e = 0;
    vector<event> ev;
    for (line i : le) {
        ev.push_back({ i.y, i.x1, 1 });
        ev.push_back({ i.y, i.x2 + 1, -1 });
    }
    sort(ev.begin(), ev.end());
    int j = 0;
    for (line i : ls) {
        while (j < ev.size() && ev[j].y <= i.y)
            update(1, 1, mx, ev[j].x, ev[j].c), ++j;
        int ret1 = query(1, 1, mx, i.x1 + 1, i.x2 - 1);
        int ret2 = query(1, 1, mx, i.x1, i.x2);
        v += ret2;
        e += max(ret2 - 1, 0);
    }
    while (j < ev.size())
        update(1, 1, mx, ev[j].x, ev[j].c), ++j;
    return pii(v, e);
}

int delX[100003];
int delY[100003];
int getComponentSize() {
    return 1;
}

int main() {
    scanf("%d%d%d", &w, &h, &n);
    vector<line> lx, ly;
    for (int i = 0; i < n; ++i) {
        int a, b, c, d;
        scanf("%d%d%d%d", &a, &b, &c, &d);
        if (b == d) lx.push_back({ a, c, b });
        else ly.push_back({ b, d, a });
        compx.push_back(a);
        compx.push_back(c);
        compy.push_back(b);
        compy.push_back(d);
    }
    lx.push_back({ 0, w, 0 });
    lx.push_back({ 0, w, h });
    ly.push_back({ 0, h, 0 });
    ly.push_back({ 0, h, w });
    compx.push_back(0);
    compx.push_back(w);
    compy.push_back(0);
    compy.push_back(h);
    sort(compx.begin(), compx.end());
    compx.erase(unique(compx.begin(), compx.end()), compx.end());
    sort(compy.begin(), compy.end());
    compy.erase(unique(compy.begin(), compy.end()), compy.end());
    sort(lx.begin(), lx.end());
    sort(ly.begin(), ly.end());
    for (line &i : lx) i.compress(compx, compy);
    for (line &i : ly) i.compress(compy, compx);
    llong v, e1, e2;
    tie(v, e1) = getVertexEdges(compx.size(), lx, ly);
    tie(v, e2) = getVertexEdges(compy.size(), ly, lx);
    llong e = e1 + e2;
    llong c = getComponentSize();
    printf("%lld\n", e - v + c);
	return 0;
}

Compilation message

2014_ho_t5.cpp: In function 'pll getVertexEdges(int, const std::vector<line>&, const std::vector<line>&)':
2014_ho_t5.cpp:71:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         while (j < ev.size() && ev[j].y <= i.y)
                ~~^~~~~~~~~~~
2014_ho_t5.cpp:73:13: warning: unused variable 'ret1' [-Wunused-variable]
         int ret1 = query(1, 1, mx, i.x1 + 1, i.x2 - 1);
             ^~~~
2014_ho_t5.cpp:78:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while (j < ev.size())
            ~~^~~~~~~~~~~
2014_ho_t5.cpp: In function 'int main()':
2014_ho_t5.cpp:90:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d%d", &w, &h, &n);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
2014_ho_t5.cpp:94:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d%d%d", &a, &b, &c, &d);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 488 KB Output is correct
3 Correct 2 ms 488 KB Output is correct
4 Correct 3 ms 488 KB Output is correct
5 Correct 3 ms 520 KB Output is correct
6 Incorrect 3 ms 576 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 488 KB Output is correct
3 Correct 2 ms 488 KB Output is correct
4 Correct 3 ms 488 KB Output is correct
5 Correct 3 ms 520 KB Output is correct
6 Incorrect 3 ms 576 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 620 KB Output is correct
2 Incorrect 4 ms 624 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 624 KB Output is correct
2 Correct 5 ms 624 KB Output is correct
3 Correct 35 ms 1336 KB Output is correct
4 Correct 3 ms 1336 KB Output is correct
5 Correct 4 ms 1336 KB Output is correct
6 Correct 368 ms 8100 KB Output is correct
7 Correct 21 ms 8100 KB Output is correct
8 Incorrect 199 ms 8100 KB Output isn't correct
9 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 488 KB Output is correct
3 Correct 2 ms 488 KB Output is correct
4 Correct 3 ms 488 KB Output is correct
5 Correct 3 ms 520 KB Output is correct
6 Incorrect 3 ms 576 KB Output isn't correct
7 Halted 0 ms 0 KB -