Submission #207920

# Submission time Handle Problem Language Result Execution time Memory
207920 2020-03-09T12:21:58 Z balbit Rectangles (IOI19_rect) C++14
72 / 100
5000 ms 998608 KB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define ull unsigned ll
#define f first
#define s second
#define ALL(x) x.begin(),x.end()
#define SZ(x) (int)x.size()
#define SQ(x) (x)*(x)
#define MN(a,b) a = min(a,(__typeof__(a))(b))
#define MX(a,b) a = max(a,(__typeof__(a))(b))
#define pb push_back
#define SORT_UNIQUE(c) (sort(c.begin(),c.end()), c.resize(distance(c.begin(),unique(c.begin(),c.end()))))
#ifdef BALBIT
#define IOS()
#define bug(...) fprintf(stderr,"#%d (%s) = ",__LINE__,#__VA_ARGS__),_do(__VA_ARGS__);
template<typename T> void _do(T &&x){cerr<<x<<endl;}
template<typename T, typename ...S> void _do(T &&x, S &&...y){cerr<<x<<", ";_do(y...);}
#else
#define IOS() ios_base::sync_with_stdio(0);cin.tie(0);
#define endl '\n'
#define bug(...)
#endif

const int iinf = 1<<29;
const ll inf = 1ll<<60;
const ll mod = 1e9+7;


void GG(){cout<<"-1\n"; exit(0);}

ll mpow(ll a, ll n, ll mo = mod){ // a^n % mod
    ll re=1;
    while (n>0){
        if (n&1) re = re*a %mo;
        a = a*a %mo;
        n>>=1;
    }
    return re;
}

ll inv (ll b, ll mo = mod){
    if (b==1) return b;
    return (mo-mo/b) * inv(mo%b) % mo;
}

const int MX = 2505;

vector<pii> hof[MX][MX], cof[MX][MX];
#define REP(i,n) for (int i = 0; i<n; ++i)
#define FOR(i,a,b) for (int i = a; i<b; ++i)

vector<int> g[MX][MX];

void go(vector<pii> up[MX][MX], vector<vector<int> > &a) {
    int n = a.size(), m = a[0].size();
    REP(i,m) REP(j,m) g[i][j] . clear();
    REP(i,n) {
        vector<int> &b = a[i];
        stack<pii> how; how.push({b[0], 0});
        FOR(j,1,m) {
            while (!how.empty() && how.top().f < b[j]) {
                g[how.top().s][j].pb(i);
                how.pop();
            }
            if (!how.empty()) {
                g[how.top().s][j].pb(i);
            }
            while (!how.empty() && how.top().f == b[j]) how.pop();
            how.push({b[j],j});
        }
    }
    REP(i,m-1) FOR(j,i+2,m) {
        if (SZ(g[i][j]) == 0) continue;
        int first = 0;
        REP(it, SZ(g[i][j]) + 1) {
            if (it == SZ(g[i][j]) || (it!=0 && g[i][j][it] != g[i][j][it-1]+1)) {
                FOR(nat, first, it) if (g[i][j][nat] -1 >= 0) up[max(g[i][j][nat]-1,0)][i].pb({g[i][j][it-1]+1,j});
                first = it;
            }
        }
    }
}

int s[MX];
int QU(int e) {
    int re = 0;
    for (e++; e>0; e-=e&-e) re += s[e];
    return re;
}
void MO(int e, int v) {
    for (e++; e<MX; e+=e&-e) s[e] += v;
}

ll count_rectangles(vector<vector<int> > a){
    go(hof,a);
    int n = a.size(), m = a[0].size();
#ifdef BALBIT
    REP(i,n) REP(j,m) {
        if (SZ(hof[i][j]) == 0) continue;
        bug(i,j);
        for (pii x : hof[i][j]) {
            cerr<<x.f<<' '<<x.s<<"\n";
        }
        cerr<<endl;
    }
#endif
    vector<vector<int> > aT(m);
    REP(j,m) {
        REP(i,n) {
            aT[j].pb(a[i][j]);
        }
    }
    go(cof, aT);
    REP(i,n) REP(j,m) {
        for (pii & x : cof[j][i]) {
            swap(x.f, x.s);
        }
    }
#ifdef BALBIT
    REP(i,n) REP(j,m) {
        if (SZ(cof[i][j]) == 0) continue;
        bug(i,j, j,i);
        for (pii x : cof[j][i]) {
            cerr<<x.f<<' '<<x.s<<"\n";
        }
        cerr<<endl;
    }
#endif
    ll re = 0;
    REP(i,n-2) REP(j,m-2) {
        vector<pii> &ud = hof[i][j], &lr = cof[j][i];
        if (ud.size() == 0 || lr.size() == 0) continue;
        sort(ALL(ud), greater<pii> ());
        sort(ALL(lr), greater<pii> ());
        int it = 0;
        for (pii & q : lr) {
            while (it < SZ(ud) && ud[it].f >= q.f) {
                MO(ud[it].s,1);
                ++it;
            }
            re += QU(q.s);
//            bug(q.s,it,QU(q.s));
        }
        REP(jt, it) {
            MO(ud[jt].s,-1);
        }
    }
    return re;
}

#ifdef BALBIT
signed main(){
    IOS();
//    ll lol = count_rectangles({{0,5,5,0},{5,2,2,5},{5,3,4,5}});
//    bug(lol);
    ll lol = count_rectangles({{4, 8, 7, 5, 6},
{7, 4, 10, 3, 5},
{9, 7, 20, 14, 2},
{9, 14, 7, 3, 6},
{5, 7, 5, 2, 7},
{4, 5, 13, 5, 6}});
    bug(lol);
}
#endif
# Verdict Execution time Memory Grader output
1 Correct 281 ms 442368 KB Output is correct
2 Correct 274 ms 442488 KB Output is correct
3 Correct 284 ms 442472 KB Output is correct
4 Correct 286 ms 442488 KB Output is correct
5 Correct 278 ms 442488 KB Output is correct
6 Correct 301 ms 442544 KB Output is correct
7 Correct 276 ms 442360 KB Output is correct
8 Correct 302 ms 442488 KB Output is correct
9 Correct 279 ms 442488 KB Output is correct
10 Correct 294 ms 442492 KB Output is correct
11 Correct 269 ms 442488 KB Output is correct
12 Correct 282 ms 442488 KB Output is correct
13 Correct 289 ms 442376 KB Output is correct
14 Correct 282 ms 442360 KB Output is correct
15 Correct 282 ms 442368 KB Output is correct
16 Correct 284 ms 442360 KB Output is correct
17 Correct 276 ms 442336 KB Output is correct
18 Correct 301 ms 442500 KB Output is correct
19 Correct 288 ms 442360 KB Output is correct
20 Correct 301 ms 442492 KB Output is correct
21 Correct 296 ms 442488 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 281 ms 442368 KB Output is correct
2 Correct 274 ms 442488 KB Output is correct
3 Correct 284 ms 442472 KB Output is correct
4 Correct 286 ms 442488 KB Output is correct
5 Correct 278 ms 442488 KB Output is correct
6 Correct 301 ms 442544 KB Output is correct
7 Correct 276 ms 442360 KB Output is correct
8 Correct 302 ms 442488 KB Output is correct
9 Correct 279 ms 442488 KB Output is correct
10 Correct 294 ms 442492 KB Output is correct
11 Correct 269 ms 442488 KB Output is correct
12 Correct 282 ms 442488 KB Output is correct
13 Correct 289 ms 442376 KB Output is correct
14 Correct 282 ms 442360 KB Output is correct
15 Correct 282 ms 442368 KB Output is correct
16 Correct 284 ms 442360 KB Output is correct
17 Correct 282 ms 442964 KB Output is correct
18 Correct 283 ms 443000 KB Output is correct
19 Correct 279 ms 443000 KB Output is correct
20 Correct 278 ms 442804 KB Output is correct
21 Correct 281 ms 442872 KB Output is correct
22 Correct 287 ms 442872 KB Output is correct
23 Correct 286 ms 442872 KB Output is correct
24 Correct 275 ms 442592 KB Output is correct
25 Correct 276 ms 442336 KB Output is correct
26 Correct 301 ms 442500 KB Output is correct
27 Correct 288 ms 442360 KB Output is correct
28 Correct 301 ms 442492 KB Output is correct
29 Correct 296 ms 442488 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 281 ms 442368 KB Output is correct
2 Correct 274 ms 442488 KB Output is correct
3 Correct 284 ms 442472 KB Output is correct
4 Correct 286 ms 442488 KB Output is correct
5 Correct 278 ms 442488 KB Output is correct
6 Correct 301 ms 442544 KB Output is correct
7 Correct 276 ms 442360 KB Output is correct
8 Correct 302 ms 442488 KB Output is correct
9 Correct 279 ms 442488 KB Output is correct
10 Correct 294 ms 442492 KB Output is correct
11 Correct 269 ms 442488 KB Output is correct
12 Correct 282 ms 442488 KB Output is correct
13 Correct 289 ms 442376 KB Output is correct
14 Correct 282 ms 442360 KB Output is correct
15 Correct 282 ms 442368 KB Output is correct
16 Correct 284 ms 442360 KB Output is correct
17 Correct 282 ms 442964 KB Output is correct
18 Correct 283 ms 443000 KB Output is correct
19 Correct 279 ms 443000 KB Output is correct
20 Correct 278 ms 442804 KB Output is correct
21 Correct 281 ms 442872 KB Output is correct
22 Correct 287 ms 442872 KB Output is correct
23 Correct 286 ms 442872 KB Output is correct
24 Correct 275 ms 442592 KB Output is correct
25 Correct 303 ms 446072 KB Output is correct
26 Correct 302 ms 446048 KB Output is correct
27 Correct 300 ms 446224 KB Output is correct
28 Correct 286 ms 444148 KB Output is correct
29 Correct 315 ms 445048 KB Output is correct
30 Correct 300 ms 445304 KB Output is correct
31 Correct 306 ms 445176 KB Output is correct
32 Correct 306 ms 445036 KB Output is correct
33 Correct 276 ms 442336 KB Output is correct
34 Correct 301 ms 442500 KB Output is correct
35 Correct 288 ms 442360 KB Output is correct
36 Correct 301 ms 442492 KB Output is correct
37 Correct 296 ms 442488 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 281 ms 442368 KB Output is correct
2 Correct 274 ms 442488 KB Output is correct
3 Correct 284 ms 442472 KB Output is correct
4 Correct 286 ms 442488 KB Output is correct
5 Correct 278 ms 442488 KB Output is correct
6 Correct 301 ms 442544 KB Output is correct
7 Correct 276 ms 442360 KB Output is correct
8 Correct 302 ms 442488 KB Output is correct
9 Correct 279 ms 442488 KB Output is correct
10 Correct 294 ms 442492 KB Output is correct
11 Correct 269 ms 442488 KB Output is correct
12 Correct 282 ms 442488 KB Output is correct
13 Correct 289 ms 442376 KB Output is correct
14 Correct 282 ms 442360 KB Output is correct
15 Correct 282 ms 442368 KB Output is correct
16 Correct 284 ms 442360 KB Output is correct
17 Correct 282 ms 442964 KB Output is correct
18 Correct 283 ms 443000 KB Output is correct
19 Correct 279 ms 443000 KB Output is correct
20 Correct 278 ms 442804 KB Output is correct
21 Correct 281 ms 442872 KB Output is correct
22 Correct 287 ms 442872 KB Output is correct
23 Correct 286 ms 442872 KB Output is correct
24 Correct 275 ms 442592 KB Output is correct
25 Correct 303 ms 446072 KB Output is correct
26 Correct 302 ms 446048 KB Output is correct
27 Correct 300 ms 446224 KB Output is correct
28 Correct 286 ms 444148 KB Output is correct
29 Correct 315 ms 445048 KB Output is correct
30 Correct 300 ms 445304 KB Output is correct
31 Correct 306 ms 445176 KB Output is correct
32 Correct 306 ms 445036 KB Output is correct
33 Correct 485 ms 478072 KB Output is correct
34 Correct 436 ms 473184 KB Output is correct
35 Correct 469 ms 473464 KB Output is correct
36 Correct 398 ms 468472 KB Output is correct
37 Correct 554 ms 488644 KB Output is correct
38 Correct 565 ms 491468 KB Output is correct
39 Correct 559 ms 488824 KB Output is correct
40 Correct 541 ms 489336 KB Output is correct
41 Correct 430 ms 461560 KB Output is correct
42 Correct 459 ms 464636 KB Output is correct
43 Correct 573 ms 475640 KB Output is correct
44 Correct 587 ms 477816 KB Output is correct
45 Correct 409 ms 461432 KB Output is correct
46 Correct 413 ms 461432 KB Output is correct
47 Correct 553 ms 474680 KB Output is correct
48 Correct 563 ms 475768 KB Output is correct
49 Correct 276 ms 442336 KB Output is correct
50 Correct 301 ms 442500 KB Output is correct
51 Correct 288 ms 442360 KB Output is correct
52 Correct 301 ms 442492 KB Output is correct
53 Correct 296 ms 442488 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 305 ms 443256 KB Output is correct
2 Correct 295 ms 443000 KB Output is correct
3 Correct 302 ms 442768 KB Output is correct
4 Correct 273 ms 442360 KB Output is correct
5 Correct 309 ms 443128 KB Output is correct
6 Correct 307 ms 443168 KB Output is correct
7 Correct 303 ms 443000 KB Output is correct
8 Correct 309 ms 443200 KB Output is correct
9 Correct 304 ms 443000 KB Output is correct
10 Correct 299 ms 442744 KB Output is correct
11 Correct 310 ms 442872 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 275 ms 442360 KB Output is correct
2 Correct 1500 ms 568184 KB Output is correct
3 Correct 3000 ms 683060 KB Output is correct
4 Correct 2982 ms 683640 KB Output is correct
5 Correct 3018 ms 683936 KB Output is correct
6 Correct 1012 ms 521208 KB Output is correct
7 Correct 1764 ms 570000 KB Output is correct
8 Correct 1892 ms 575736 KB Output is correct
9 Correct 276 ms 442336 KB Output is correct
10 Correct 301 ms 442500 KB Output is correct
11 Correct 288 ms 442360 KB Output is correct
12 Correct 301 ms 442492 KB Output is correct
13 Correct 296 ms 442488 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 281 ms 442368 KB Output is correct
2 Correct 274 ms 442488 KB Output is correct
3 Correct 284 ms 442472 KB Output is correct
4 Correct 286 ms 442488 KB Output is correct
5 Correct 278 ms 442488 KB Output is correct
6 Correct 301 ms 442544 KB Output is correct
7 Correct 276 ms 442360 KB Output is correct
8 Correct 302 ms 442488 KB Output is correct
9 Correct 279 ms 442488 KB Output is correct
10 Correct 294 ms 442492 KB Output is correct
11 Correct 269 ms 442488 KB Output is correct
12 Correct 282 ms 442488 KB Output is correct
13 Correct 289 ms 442376 KB Output is correct
14 Correct 282 ms 442360 KB Output is correct
15 Correct 282 ms 442368 KB Output is correct
16 Correct 284 ms 442360 KB Output is correct
17 Correct 282 ms 442964 KB Output is correct
18 Correct 283 ms 443000 KB Output is correct
19 Correct 279 ms 443000 KB Output is correct
20 Correct 278 ms 442804 KB Output is correct
21 Correct 281 ms 442872 KB Output is correct
22 Correct 287 ms 442872 KB Output is correct
23 Correct 286 ms 442872 KB Output is correct
24 Correct 275 ms 442592 KB Output is correct
25 Correct 303 ms 446072 KB Output is correct
26 Correct 302 ms 446048 KB Output is correct
27 Correct 300 ms 446224 KB Output is correct
28 Correct 286 ms 444148 KB Output is correct
29 Correct 315 ms 445048 KB Output is correct
30 Correct 300 ms 445304 KB Output is correct
31 Correct 306 ms 445176 KB Output is correct
32 Correct 306 ms 445036 KB Output is correct
33 Correct 485 ms 478072 KB Output is correct
34 Correct 436 ms 473184 KB Output is correct
35 Correct 469 ms 473464 KB Output is correct
36 Correct 398 ms 468472 KB Output is correct
37 Correct 554 ms 488644 KB Output is correct
38 Correct 565 ms 491468 KB Output is correct
39 Correct 559 ms 488824 KB Output is correct
40 Correct 541 ms 489336 KB Output is correct
41 Correct 430 ms 461560 KB Output is correct
42 Correct 459 ms 464636 KB Output is correct
43 Correct 573 ms 475640 KB Output is correct
44 Correct 587 ms 477816 KB Output is correct
45 Correct 409 ms 461432 KB Output is correct
46 Correct 413 ms 461432 KB Output is correct
47 Correct 553 ms 474680 KB Output is correct
48 Correct 563 ms 475768 KB Output is correct
49 Correct 305 ms 443256 KB Output is correct
50 Correct 295 ms 443000 KB Output is correct
51 Correct 302 ms 442768 KB Output is correct
52 Correct 273 ms 442360 KB Output is correct
53 Correct 309 ms 443128 KB Output is correct
54 Correct 307 ms 443168 KB Output is correct
55 Correct 303 ms 443000 KB Output is correct
56 Correct 309 ms 443200 KB Output is correct
57 Correct 304 ms 443000 KB Output is correct
58 Correct 299 ms 442744 KB Output is correct
59 Correct 310 ms 442872 KB Output is correct
60 Correct 275 ms 442360 KB Output is correct
61 Correct 1500 ms 568184 KB Output is correct
62 Correct 3000 ms 683060 KB Output is correct
63 Correct 2982 ms 683640 KB Output is correct
64 Correct 3018 ms 683936 KB Output is correct
65 Correct 1012 ms 521208 KB Output is correct
66 Correct 1764 ms 570000 KB Output is correct
67 Correct 1892 ms 575736 KB Output is correct
68 Correct 4425 ms 864616 KB Output is correct
69 Correct 3265 ms 796668 KB Output is correct
70 Correct 3739 ms 797180 KB Output is correct
71 Correct 2526 ms 729464 KB Output is correct
72 Execution timed out 5139 ms 998608 KB Time limit exceeded
73 Halted 0 ms 0 KB -