제출 #776774

#제출 시각아이디문제언어결과실행 시간메모리
776774vjudge1NLO (COCI18_nlo)C++17
110 / 110
170 ms15300 KiB
#include <bits/stdc++.h> using namespace std; typedef long long lo; #define fi first #define se second #define int long long #define endl "\n" #define pb push_back #define fio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) #define FOR for(int i=1;i<=n;i++) #define mid ((start+end)/2) #define ort ((bas+son)/2) const lo inf = 1000000000; const lo li = 100005; const lo mod = 1000000007; int n,m,a[li],k,flag,t,x[li],y[li],r[li]; int cev; string s; vector<int> v; set<pair<int,int>> st[li]; int32_t main(void){ scanf("%lld %lld",&n,&m); scanf("%lld",&k); for(int i=1;i<=k;i++){ scanf("%lld %lld %lld",&x[i],&y[i],&r[i]); } int add=n*m; cev=0; for(int i=k;i>=1;i--){ int yy=x[i]; while(yy>=1){ int at=r[i]*r[i]-((yy-x[i])*(yy-x[i])); if(at<0)break; int kat=sqrt(at); int l=y[i]-kat; int r=y[i]+kat; if(st[yy].empty()){ add-=r-l+1; //~ cout<<yy<<" () AA "<<l<<" AA "<<r<<endl; st[yy].insert({l,r}); yy--; continue; //~ cout<<yy<<" DEBUGDEBUG \n"; } else{ auto it=st[yy].begin(); int mn=l; int mx=r; int say=0; while(it!=st[yy].end()){ if((*it).fi>r)break; if((*it).se<l){it++;continue;} mn=min(mn,(*it).fi); auto it1=it; it1++; say+=min(r,(*it).se)-max(l,(*it).fi)+1; mx=max(mx,(*it).se); st[yy].erase(it); it=it1; } add-=r-l+1-say; st[yy].insert({mn,mx}); } //~ cout<<add<<" ()() "<<yy<<" ()() "<<rr<<endl; yy--; //~ rr--; } //~ cout<<add<<" tmp_add \n"; //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// yy=x[i]+1; while(yy<=n){ int at=r[i]*r[i]-((yy-x[i])*(yy-x[i])); if(at<0)break; int kat=sqrt(at); int l=y[i]-kat; int r=y[i]+kat; if(st[yy].empty()){ add-=r-l+1; st[yy].insert({l,r}); yy++; continue; } else{ auto it=st[yy].begin(); int mn=l; int mx=r; int say=0; while(it!=st[yy].end()){ if((*it).fi>r)break; if((*it).se<l){it++;continue;} mn=min(mn,(*it).fi); auto it1=it; it1++; say+=min(r,(*it).se)-max(l,(*it).fi)+1; mx=max(mx,(*it).se); st[yy].erase(it); it=it1; } add-=r-l+1-say; st[yy].insert({mn,mx}); } yy++; //~ rr--; } cev+=add; //~ cout<<add<<endl; } printf("%lld\n",cev); return 0; }

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

nlo.cpp: In function 'int32_t main()':
nlo.cpp:28:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 |  scanf("%lld %lld",&n,&m);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~
nlo.cpp:29:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   29 |  scanf("%lld",&k);
      |  ~~~~~^~~~~~~~~~~
nlo.cpp:31:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   31 |   scanf("%lld %lld %lld",&x[i],&y[i],&r[i]);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...