Submission #220767

#TimeUsernameProblemLanguageResultExecution timeMemory
220767VEGAnn팀들 (IOI15_teams)C++14
0 / 100
592 ms132320 KiB
#include <bits/stdc++.h> #include "teams.h" #define pii pair<int,int> #define ft first #define sd second #define MP make_pair #define PB push_back #define all(x) x.begin(),x.end() #define sz(x) ((int)x.size()) using namespace std; typedef long long ll; const int oo = 2e9; const int N = 500100; vector<int> lf, rt; vector<pii> vc, events; int n, kol, tt = 0; ll mx[4 * N], psh[4 * N]; // constraints here can be smaller struct seg_tree{ vector<int> ys; seg_tree(): ys(0) {} }; seg_tree st[4 * N]; void build(int v, int l, int r){ if (l == r){ st[v].ys.clear(); st[v].ys.PB(vc[l].sd); return; } int md = (l + r) >> 1; build(v + v, l, md); build(v + v + 1, md + 1, r); merge(all(st[v + v].ys), all(st[v + v + 1].ys), back_inserter(st[v].ys)); } int calc(int v, int l, int r, int min_x, int max_y){ if (vc[r].ft < min_x) return 0; if (vc[l].ft >= min_x){ int kol = upper_bound(all(st[v].ys), max_y) - st[v].ys.begin(); return kol; } int md = (l + r) >> 1; return calc(v + v, l, md, min_x, max_y) + calc(v + v + 1, md + 1, r, min_x, max_y); } void init(int N, int A[], int B[]) { n = N; vc.clear(); for (int i = 0; i < n; i++) { vc.PB(MP(A[i], B[i])); lf.PB(A[i]); rt.PB(B[i]); } sort(all(vc)); sort(all(lf)); sort(all(rt)); build(1, 0, n - 1); } void new_build(int v, int l, int r){ mx[v] = 0; if (l == r) return; int md = (l + r) >> 1; new_build(v + v, l, md); new_build(v + v + 1, md + 1, r); } void push(int v){ if (psh[v] != 0){ mx[v] += psh[v]; if (v + v + 1 < 4 * N){ psh[v + v] += psh[v]; psh[v + v + 1] += psh[v]; } psh[v] = 0; } } void update(int v, int tl, int tr, int l, int r, ll vl){ push(v); if (l > r) return; if (tl == l && tr == r) { psh[v] = vl; push(v); return; } int md = (tl + tr) >> 1; update(v + v, tl, md, l, min(r, md), vl); update(v + v + 1, md + 1, tr, max(md + 1, l), r, vl); mx[v] = max(mx[v + v], mx[v + v + 1]); } int can(int M, int K[]) { sort(K, K + M); tt++; events.clear(); for (int i = 0; i < M; ){ int j = i; events.PB(MP(K[i], 0)); while (j < M && K[i] == K[j]){ events.back().sd++; j++; } i = j; } new_build(1, 0, sz(events) - 1); ll sum = 0; for (int it = 0; it < sz(events); it++){ pii cr = events[it]; if (it > 0){ if (events[it - 1].ft + 1 <= events[it].ft - 1){ int kol = calc(1, 0, n - 1, events[it - 1].ft + 1, events[it].ft - 1); update(1, 0, sz(events) - 1, 0, it - 1, kol); } } int kol_up = n - (upper_bound(all(lf), events[it].ft) - lf.begin()); int kol_lo = lower_bound(all(rt), events[it].ft) - rt.begin(); update(1, 0, sz(events) - 1, it, it, kol_lo); update(1, 0, sz(events) - 1, 0, it, ll(cr.sd) * ll(cr.ft)); if (mx[1] + ll(kol_up) > ll(n)) return 0; } return 1; }

Compilation message (stderr)

teams.cpp: In function 'int calc(int, int, int, int, int)':
teams.cpp:45:13: warning: declaration of 'kol' shadows a global declaration [-Wshadow]
         int kol = upper_bound(all(st[v].ys), max_y) - st[v].ys.begin();
             ^~~
teams.cpp:16:8: note: shadowed declaration is here
 int n, kol, tt = 0;
        ^~~
teams.cpp:45:53: warning: conversion to 'int' from '__gnu_cxx::__normal_iterator<int*, std::vector<int> >::difference_type {aka long int}' may alter its value [-Wconversion]
         int kol = upper_bound(all(st[v].ys), max_y) - st[v].ys.begin();
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
teams.cpp: In function 'void init(int, int*, int*)':
teams.cpp:54:34: warning: declaration of 'N' shadows a global declaration [-Wshadow]
 void init(int N, int A[], int B[]) {
                                  ^
teams.cpp:13:11: note: shadowed declaration is here
 const int N = 500100;
           ^
teams.cpp: In function 'int can(int, int*)':
teams.cpp:141:21: warning: declaration of 'kol' shadows a global declaration [-Wshadow]
                 int kol = calc(1, 0, n - 1, events[it - 1].ft + 1, events[it].ft - 1);
                     ^~~
teams.cpp:16:8: note: shadowed declaration is here
 int n, kol, tt = 0;
        ^~~
teams.cpp:146:24: warning: conversion to 'int' from '__gnu_cxx::__normal_iterator<int*, std::vector<int> >::difference_type {aka long int}' may alter its value [-Wconversion]
         int kol_up = n - (upper_bound(all(lf), events[it].ft) - lf.begin());
                      ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
teams.cpp:147:58: warning: conversion to 'int' from '__gnu_cxx::__normal_iterator<int*, std::vector<int> >::difference_type {aka long int}' may alter its value [-Wconversion]
         int kol_lo = lower_bound(all(rt), events[it].ft) - rt.begin();
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
teams.cpp:134:8: warning: unused variable 'sum' [-Wunused-variable]
     ll sum = 0;
        ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...