제출 #379295

#제출 시각아이디문제언어결과실행 시간메모리
379295MilosMilutinovicPairs (IOI07_pairs)C++14
60 / 100
46 ms4076 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long int n,d,m; void Solve1D(){ vector<int> x(n); for(int i=0;i<n;i++)scanf("%i",&x[i]); sort(x.begin(),x.end()); ll ans=0; for(int i=0;i<n;i++){ int bot=i,top=n-1,pos=i; while(bot<=top){ int mid=bot+top>>1; if(x[mid]-x[i]<=d)pos=mid,bot=mid+1; else top=mid-1; } ans+=pos-i; } printf("%lld",ans); } const int N=200050; int bit[N]; void Add(int x,int f){ for(;x<N;x+=x&-x){ bit[x]+=f; } } int Get(int x){ int res=0; for(;x;x-=x&-x){ res+=bit[x]; } return res; } void Solve2D(){ vector<int> x(n),y(n),sum(n),dif(n); for(int i=0;i<n;i++)scanf("%i%i",&x[i],&y[i]),sum[i]=x[i]+y[i],dif[i]=x[i]-y[i]; vector<int> id(n); iota(id.begin(),id.end(),0); sort(id.begin(),id.end(),[&](int i,int j){ return dif[i]<dif[j]; }); int j=0; ll ans=0; for(int i=0;i<n;i++){ while(dif[id[i]]-dif[id[j]]>d){ Add(sum[id[j]],-1); j++; } ans+=Get(min(N-1,sum[id[i]]+d))-Get(max(1,sum[id[i]]-d-1)); Add(sum[id[i]],1); } printf("%lld",ans); } int main(){ int b;scanf("%i%i%i%i",&b,&n,&d,&m); if(b==1)Solve1D(); if(b==2)Solve2D(); //if(b==3)Solve3D(); }

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

pairs.cpp: In function 'void Solve1D()':
pairs.cpp:13:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   13 |    int mid=bot+top>>1;
      |            ~~~^~~~
pairs.cpp:7:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    7 |     for(int i=0;i<n;i++)scanf("%i",&x[i]);
      |                         ~~~~~^~~~~~~~~~~~
pairs.cpp: In function 'void Solve2D()':
pairs.cpp:37:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   37 |     for(int i=0;i<n;i++)scanf("%i%i",&x[i],&y[i]),sum[i]=x[i]+y[i],dif[i]=x[i]-y[i];
      |                         ~~~~~^~~~~~~~~~~~~~~~~~~~
pairs.cpp: In function 'int main()':
pairs.cpp:56:13: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   56 |  int b;scanf("%i%i%i%i",&b,&n,&d,&m);
      |        ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#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...