제출 #710590

#제출 시각아이디문제언어결과실행 시간메모리
710590ktkeremBuilding Bridges (CEOI17_building)C++17
100 / 100
78 ms65628 KiB
/*#pragma GCC target ("avx2") #pragma GCC optimize ("O3") #pragma GCC optimize("Ofast") #pragma GCC optimize ("unroll-loops") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")/**/ #include<bits/stdc++.h> typedef long long ll; typedef long double ld; typedef long long ftyp; typedef std::complex<ftyp> vec; #define llll std::pair<ll , ll> #define pb push_back #define fi first #define sec second #define cx real #define cy imag #define all(a) a.begin() , a.end() #define debug std::cout << "!!ALERT ALERT!!" << std::endl; const ll limit = 1e9+7; const ll sus = 1e6 + 5; std::mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count()); ll rnd(ll a , ll b){ return (rng() % (b-a+1)) + a; } /*global variables*/ ll n; std::vector<ll> ar , br; std::vector<vec> valt; /**/ /*functions*/ ftyp dot(vec a , vec b){ return (std::conj(a) * b).cy(); } void addLine(vec dd , ftyp l , ftyp r , ll a){ ll md = (l + r + 1)/2; ll fo = dot(dd , {l , 1}) < dot(valt[a] , {l , 1}) , so = dot(dd , {md , 1}) < dot(valt[a] , {md , 1}); //std::cout << l << " " << r << " " << dd.cx() << " " << dd.cy() << "\n"; if(so){ std::swap(valt[a] , dd); } if(l >= r){ return; } if(fo != so){ addLine(dd , l , md-1 , a*2); } else{ addLine(dd , md , r , a*2+1); } } ftyp gt(ll x , ll l , ll r , ll a){ ll md = (l + r + 1)/2; if(l >= r){ /*std::cout << valt[a].cx() << " " << valt[a].cy() << "\n"; std::cout << dot(valt[a] , {x , 1}) << "\n";*/ return dot(valt[a] , {x , 1}); } else if(md > x){ return std::min(dot(valt[a] , {x , 1}) , gt(x , l , md-1 , a*2)); } else{ return std::min(dot(valt[a] , {x , 1}) , gt(x , md , r , a*2+1)); } } /**/ void solve(){ std::cin >> n; ar.resize(n); br.resize(n); for(ll i = 0 ; n>i;i++){ std::cin >> ar[i]; } ll sm = 0; for(ll i = 0 ; n>i;i++){ std::cin >> br[i]; sm+=br[i]; } valt.resize(sus*4 , {(ar[0] * ar[0]) - br[0] , 2 * ar[0]}); ll ans = 0; for(ll i = 1;n>i;i++){ ll a = gt(ar[i] , 0 , sus , 1); ans = ar[i] * ar[i] + a - br[i]; addLine({ans + ar[i] * ar[i] , 2 * ar[i]} , 0 , sus , 1); /*std::cout << a << "\n"; std::cout << ans << "\n"; std::cout << std::endl;*/ } std::cout << ans + sm; return;/**/ } int main(){ std::ios_base::sync_with_stdio(false);std::cin.tie(NULL); /*#ifndef ONLINE_JUDGE freopen("in.txt" , "r" , stdin); freopen("out.txt" , "w" , stdout); #endif*/ ll t = 1; //std::cin >> t; while(t--){ solve(); } }

컴파일 시 표준 에러 (stderr) 메시지

building.cpp:5:78: warning: "/*" within comment [-Wcomment]
    5 | #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")/**/
      |
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...