Submission #720153

#TimeUsernameProblemLanguageResultExecution timeMemory
720153marvinthangPairs (IOI07_pairs)C++17
100 / 100
226 ms25268 KiB
/************************************* * author: marvinthang * * created: 23.08.2022 20:47:40 * *************************************/ #include <bits/stdc++.h> using namespace std; #define fi first #define se second #define div ___div #define left ___left #define right ___right #define TIME (1.0 * clock() / CLOCKS_PER_SEC) #define MASK(i) (1LL << (i)) #define FULL(i) (MASK(i) - 1) #define BIT(x, i) ((x) >> (i) & 1) #define __builtin_popcount __builtin_popcountll #define scan_op(...) istream & operator >> (istream &in, __VA_ARGS__ &u) #define print_op(...) ostream & operator << (ostream &out, const __VA_ARGS__ &u) #define file(name) if (fopen (name".inp", "r")) { freopen (name".inp", "r", stdin); freopen (name".out", "w", stdout); } template <class T> scan_op(vector <T>) { for (size_t i = 0; i < u.size(); ++i) in >> u[i]; return in; } template <class T> print_op(vector <T>) { out << '{'; for (size_t i = 0; i + 1 < u.size(); ++i) out << u[i] << ", "; if (!u.empty()) out << u.back(); return out << '}'; } template <class U, class V> scan_op(pair <U, V>) { return in >> u.fi >> u.se; } template <class U, class V> print_op(pair <U, V>) { return out << '(' << u.fi << ", " << u.se << ')'; } template <class A, class B> inline bool minimize(A &a, B b) { A eps = 1e-9; if (a > b + eps) { a = b; return true; } return false; } template <class A, class B> inline bool maximize(A &a, B b) { A eps = 1e-9; if (a + eps < b) { a = b; return true; } return false; } const double PI = 3.1415926535897932384626433832795; // acos(-1.0); atan(-1.0); const int dir[] = {1, 0, -1, 0, 1, 1, -1, -1, 1}; // {2, 1, -2, -1, -2, 1, 2, -1, 2}; const int MAX = 12e6; int bit[MAX], maxX = 1, maxY = 1, maxZ = 1; inline int &at(int x, int y, int z) { return bit[((x - 1) * maxY + (y - 1)) * maxZ + z - 1]; } void update(int xx, int yy, int zz, int val) { for (int x = xx; x <= maxX; x += x & -x) for (int y = yy; y <= maxY; y += y & -y) for (int z = zz; z <= maxZ; z += z & -z) at(x, y, z) += val; } int get(int xx, int yy, int zz) { int res = 0; for (int x = xx; x; x &= x - 1) for (int y = yy; y; y &= y - 1) for (int z = zz; z; z &= z - 1) res += at(x, y, z); return res; } int get(int x1, int y1, int z1, int x2, int y2, int z2) { --x1; --y1; --z1; maximize(x1, 0); maximize(y1, 0); maximize(z1, 0); minimize(x2, maxX); minimize(y2, maxY); minimize(z2, maxZ); return get(x2, y2, z2) - get(x1, y2, z2) - get(x2, y1, z2) - get(x2, y2, z1) + get(x1, y1, z2) + get(x2, y1, z1) + get(x1, y2, z1) - get(x1, y1, z1); } int B, N, D, M; struct Item { int a, b, c, d; Item(int a = 1, int b = 1, int c = 1, int d = 1): a(a), b(b), c(c), d(d) {} bool operator < (const Item &other) const { return a < other.a; } } items[(int) 1e5 + 5]; void init(void) { cin >> B >> N >> D >> M; if (B == 2) maxX = 2 * M; else if (B == 3) maxX = maxY = maxZ = 3 * M; for (int i = 1; i <= N; ++i) { int x, y, z; if (B == 1) { cin >> x; items[i] = Item(x); } else if (B == 2) { cin >> x >> y; items[i] = Item(x + y - 1, x - y + M); } else { cin >> x >> y >> z; items[i] = Item(x + y + z - 2, x + y - z + M - 1, x - y + z + M - 1, x - y - z + M + M); } } sort(items + 1, items + 1 + N); } void process(void) { long long res = 0; for (int r = 1, l = 1; r <= N; ++r) { while (items[r].a - items[l].a > D) update(items[l].b, items[l].c, items[l].d, -1), ++l; res += get( items[r].b - D, items[r].c - D, items[r].d - D, items[r].b + D, items[r].c + D, items[r].d + D); update(items[r].b, items[r].c, items[r].d, +1); } cout << res << '\n'; } int main(void) { ios_base::sync_with_stdio(false); cin.tie(nullptr); // cout.tie(nullptr); file("nkpairs"); init(); process(); cerr << "Time elapsed: " << TIME << " s.\n"; return (0^0); }

Compilation message (stderr)

pairs.cpp: In function 'int main()':
pairs.cpp:22:69: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 | #define          file(name)  if (fopen (name".inp", "r")) { freopen (name".inp", "r", stdin); freopen (name".out", "w", stdout); }
      |                                                             ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
pairs.cpp:114:2: note: in expansion of macro 'file'
  114 |  file("nkpairs");
      |  ^~~~
pairs.cpp:22:103: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 | #define          file(name)  if (fopen (name".inp", "r")) { freopen (name".inp", "r", stdin); freopen (name".out", "w", stdout); }
      |                                                                                               ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
pairs.cpp:114:2: note: in expansion of macro 'file'
  114 |  file("nkpairs");
      |  ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...