Submission #634571

#TimeUsernameProblemLanguageResultExecution timeMemory
634571yunny_worldNLO (COCI18_nlo)C++14
110 / 110
770 ms332 KiB
#include <bits/stdc++.h> #define ll long long int #define pii pair<int, int> #define pll pair<ll, ll> #define X first #define Y second using namespace std; int dx[4] = { 0,0,1,-1 }; int dy[4] = { 1,-1,0,0 }; ll n, m, k; tuple<ll, ll, ll> query[105]; ll ans; void solve() { cin>>n>>m>>k; for(ll i=1;i<=k;i++) { ll x, y, r; cin>>x>>y>>r; query[i]=tie(x, y, r); } ans=n*m*k; for(ll i=1;i<=m;i++) { vector<pll> v; for(ll j=1;j<=k;j++) { ll x, y, r; tie(x, y, r)=query[j]; if(r*r-(y-i)*(y-i)<0) continue; ll s=x-floor(sqrt(r*r-(y-i)*(y-i))); ll e=x+floor(sqrt(r*r-(y-i)*(y-i))); v.push_back({s, j}); v.push_back({e+1, -j}); } sort(v.begin(), v.end()); set<ll> s; for(ll j=0;j<v.size();j++) { //cout<<v[j].X<<' '<<v[j].Y<<'\n'; if(!s.empty()) ans-=(*s.rbegin() * (v[j].X-v[j-1].X)); if(v[j].Y<0) s.erase(-v[j].Y); else s.insert(v[j].Y); } //cout<<'\n'; } cout<<ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int tc = 1; //cin >> tc; while (tc--) solve(); return 0; } /* 어떤 위치에 q번째 쿼리가 마지막으로 적용 됨 -> k-q 만큼의 풀이 자람 즉, 각 위치에 대해 가장 마지막으로 적용된 쿼리만 알면 된다. https://oj.uz/submission/230502 */

Compilation message (stderr)

nlo.cpp: In function 'void solve()':
nlo.cpp:47:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |         for(ll j=0;j<v.size();j++)
      |                    ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...