Submission #334366

#TimeUsernameProblemLanguageResultExecution timeMemory
334366CodeTiger927ČVENK (COI15_cvenk)C++14
100 / 100
253 ms123116 KiB
#pragma GCC target ("avx2") #pragma GCC optimization ("Ofast") #pragma GCC optimization ("unroll-loops") using namespace std; #include <iostream> #include <algorithm> #define MAXN 100005 struct node { node* c[2]; long long x,y,s,xy; node(long long _x,long long _y): x(_x),y(_y),xy(_x + _y),s(0) { c[0] = c[1] = nullptr; } node* insert(node* next,bool lr) { s++; if(!c[lr]) c[lr] = next; if(next -> x < c[lr] -> x || next -> y < c[lr] -> y) { next -> c[lr] = c[lr]; next -> s += c[lr] -> s; c[lr] = next; return next; } if(next -> x > c[lr] -> x || next -> y > c[lr] -> y) { return c[lr] -> insert(next,lr); } return c[lr]; } }; node* root = new node(0,0); long long sum,ans; long long N; pair<long long,long long> pts[MAXN]; void dfs(node* cur,long long curN) { ans = min(ans,curN); if(cur -> c[0]) dfs(cur -> c[0],curN + (1ll * N - 2 * cur -> c[0] -> s) * (cur -> c[0] -> xy - cur -> xy)); if(cur -> c[1]) dfs(cur -> c[1],curN + (1ll * N - 2 * cur -> c[1] -> s) * (cur -> c[1] -> xy - cur -> xy)); } int main() { cin >> N; for(int i = 0;i < N;++i) { cin >> pts[i].first >> pts[i].second; sum += pts[i].first + pts[i].second; } sort(pts,pts + N,[&](pair<long long,long long> p1,pair<long long,long long> p2) {return (p1.first + p1.second) > (p2.first + p2.second);}); for(int i = 0;i < N;++i) { long long curX,curY; curX = curY = 0; node* cur = root; for(int j = 29;j >= 0;--j) { if(pts[i].first & (1 << j)) { curX += (1 << j); cur = cur -> insert(new node(curX,curY),0); }else if(pts[i].second & (1 << j)) { curY += (1 << j); cur = cur -> insert(new node(curX,curY),1); } } cur -> s++; } ans = sum; dfs(root,sum); cout << ans << endl; return 0; }

Compilation message (stderr)

cvenk.cpp:2: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
    2 | #pragma GCC optimization ("Ofast")
      | 
cvenk.cpp:3: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
    3 | #pragma GCC optimization ("unroll-loops")
      | 
cvenk.cpp: In constructor 'node::node(long long int, long long int)':
cvenk.cpp:15:18: warning: 'node::xy' will be initialized after [-Wreorder]
   15 |  long long x,y,s,xy;
      |                  ^~
cvenk.cpp:15:16: warning:   'long long int node::s' [-Wreorder]
   15 |  long long x,y,s,xy;
      |                ^
cvenk.cpp:16:2: warning:   when initialized here [-Wreorder]
   16 |  node(long long _x,long long _y): x(_x),y(_y),xy(_x + _y),s(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...