Submission #265399

#TimeUsernameProblemLanguageResultExecution timeMemory
265399TadijaSebezNuclearia (CEOI15_nuclearia)C++11
17 / 100
1097 ms105336 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int N=200050; int x[N],y[N],a[N],b[N],rng[N]; int xl[N],xr[N],yl[N],yr[N]; int dist(int x1,int y1,int x2,int y2){return max(abs(x1-x2),abs(y1-y2));} int get(int i,int X,int Y){return max((ll)0,a[i]-(ll)b[i]*dist(x[i],y[i],X,Y));} int main(){ int H,W,n,q; scanf("%i %i %i",&H,&W,&n); for(int i=1;i<=n;++i)scanf("%i %i %i %i",&x[i],&y[i],&a[i],&b[i]),rng[i]=a[i]/b[i]; scanf("%i",&q); for(int i=1;i<=q;++i)scanf("%i %i %i %i",&xl[i],&yl[i],&xr[i],&yr[i]); if(H>W){ swap(H,W); for(int i=1;i<=n;++i)swap(x[i],y[i]); for(int i=1;i<=q;++i)swap(xl[i],yl[i]),swap(xr[i],yr[i]); } vector<ll> fir(W+2,0),add(W+2,0); vector<vector<ll>> cell(H+1,vector<ll>(W+1,0)); for(int i=1;i<=n;++i){ if(x[i]<=rng[i]){ for(int j=1;j<=W;++j)fir[j]+=get(i,0,j); } } for(int i=1;i<=H;++i){ for(int o=1;o<=n;++o){ int t=i<=x[o]?x[o]-i:i-x[o]-1; if(t<=rng[o]){ int dif=t==rng[0]?get(o,i,y[o])-get(o,i-1,y[o]):(i<=x[o]?b[o]:-b[o]); add[max(1,y[o]-t)]+=dif; add[min(W+1,y[o]+t+1)]-=dif; } } ll sum=0; for(int j=1;j<=W;++j){ sum+=add[j]; cell[i][j]=sum+fir[j]; cell[i][j]+=cell[i-1][j]+cell[i][j-1]-cell[i-1][j-1]; } } for(int i=1;i<=q;++i){ ll ans=cell[xr[i]][yr[i]]-cell[xl[i]-1][yr[i]]-cell[xr[i]][yl[i]-1]+cell[xl[i]-1][yl[i]-1]; ll sz=(xr[i]-xl[i]+1)*(yr[i]-yl[i]+1); ll out=ans/sz; if((ans%sz)*2>=sz)out++; printf("%lld\n",out); } return 0; }

Compilation message (stderr)

nuclearia.cpp: In function 'int main()':
nuclearia.cpp:11:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   11 |  scanf("%i %i %i",&H,&W,&n);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~
nuclearia.cpp:12:28: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   12 |  for(int i=1;i<=n;++i)scanf("%i %i %i %i",&x[i],&y[i],&a[i],&b[i]),rng[i]=a[i]/b[i];
      |                       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nuclearia.cpp:13:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   13 |  scanf("%i",&q);
      |  ~~~~~^~~~~~~~~
nuclearia.cpp:14:28: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   14 |  for(int i=1;i<=q;++i)scanf("%i %i %i %i",&xl[i],&yl[i],&xr[i],&yr[i]);
      |                       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...