Submission #225034

#TimeUsernameProblemLanguageResultExecution timeMemory
225034mehrdad_sohrabiČVENK (COI15_cvenk)C++14
60 / 100
3096 ms269896 KiB
#include <bits/stdc++.h> typedef long long int ll; typedef long double ld; #define pb push_back #define pii pair < ll , ll > #define F first #define S second #define endl '\n' //#define int long long #define sync ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0) #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math") #define kill(x) return cout<<x<<'\n', 0; using namespace std; const int N=1e5+100,M=60; vector <int> g[N*32]; map <pii,int> mp; int w[N*32]; pii nod[N*32]; int par[N*32]; int sz[N*32]; ll dp[N*32]; int n; ll ma=(ll)1e15; void dfssz(ll v){ sz[v]=w[v]; for (auto u : g[v]){ dfssz(u); sz[v]+=sz[u]; } } void dfsdp(ll v){ for (auto u : g[v]){ dfsdp(u); dp[v]+=dp[u]; ll e=nod[u].F-nod[v].F+nod[u].S-nod[v].S; dp[v]+=(ll)sz[u]*e; } } void dfs(ll v){ ma=min(ma,dp[v]); for (auto u : g[v]){ ll e=nod[u].F-nod[v].F+nod[u].S-nod[v].S; dp[u]=(ll)dp[v]+(ll)e*(ll)n-(ll)2*(ll)e*(ll)sz[u]; dfs(u); } } int32_t main(){ sync; scanf("%d",&n); // cin >> n; vector <pii> a; int cnt=2; mp[{0,0}]=1; nod[1]={0,0}; for (int i=0;i<n;i++){ int r,s; scanf("%d %d",&r,&s); //cin >> r >> s; int f=r,h=s; int x=0,y=0; for (int j=M/2;j>-1;j--){ int z=x,t=y; if ((r-x)>=(1<<j)){ x+=(1<<j); if (mp[{x,y}]==0){ nod[cnt]={x,y}; par[cnt]=mp[{z,t}]; mp[{x,y}]=cnt++; } a.pb({x,y}); } if ((s-y)>=(1<<j)){ y+=(1<<j); a.pb({x,y}); if (mp[{x,y}]==0){ nod[cnt]={x,y}; // cout << x << " " << y << endl; par[cnt]=mp[{z,t}]; mp[{x,y}]=cnt++; } } } w[mp[{r,s}]]++; } a.pb({0,0}); sort(a.begin(),a.end()); a.resize(unique(a.begin(), a.end()) - a.begin()); for (int i=1;i<a.size();i++){ if (a[i].F==a[i-1].F && nod[par[mp[a[i]]]].S<=nod[mp[a[i-1]]].S && nod[par[mp[a[i]]]].F==nod[mp[a[i-1]]].F){ par[mp[a[i]]]=mp[a[i-1]]; } } vector <pii> b; for (int i=0;i<a.size();i++){ swap(a[i].F,a[i].S); b.pb(a[i]); swap(a[i].F,a[i].S); } sort(b.begin(),b.end()); for (int i=1;i<b.size();i++){ pii d=b[i],e=b[i-1]; swap(d.F,d.S); swap(e.F,e.S); if (b[i].F==b[i-1].F && nod[par[mp[d]]].F<=nod[mp[e]].F && nod[par[mp[d]]].S==nod[mp[e]].S){ par[mp[d]]=mp[e]; // cout << nod[par[mp[{2,1}]]].F << " argers " << nod[par[mp[{2,1}]]].S << endl; } } for (int i=1;i<a.size();i++){ g[par[mp[a[i]]]].pb(mp[a[i]]); // cout << par[mp[a[i]]] << " " << mp[a[i]] << " " << nod[mp[a[i]]].F << " " << nod[mp[a[i]]].S << " " << nod[par[mp[a[i]]]].F << " " << nod[par[mp[a[i]]]].S << endl; } dfssz(mp[{0,0}]); dfsdp(mp[{0,0}]); dfs(mp[{0,0}]); printf("%lld",ma); // cout << ans-(1<<28); } /* 9 28 0 25 4 20 9 20 0 18 13 16 12 16 5 4 9 10 16 */

Compilation message (stderr)

cvenk.cpp: In function 'int32_t main()':
cvenk.cpp:59:13: warning: unused variable 'f' [-Wunused-variable]
         int f=r,h=s;
             ^
cvenk.cpp:59:17: warning: unused variable 'h' [-Wunused-variable]
         int f=r,h=s;
                 ^
cvenk.cpp:89:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=1;i<a.size();i++){
                  ~^~~~~~~~~
cvenk.cpp:95:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=0;i<a.size();i++){
                  ~^~~~~~~~~
cvenk.cpp:101:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=1;i<b.size();i++){
                  ~^~~~~~~~~
cvenk.cpp:110:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=1;i<a.size();i++){
                  ~^~~~~~~~~
cvenk.cpp:49:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&n);
     ~~~~~^~~~~~~~~
cvenk.cpp:57:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d",&r,&s);
         ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...