제출 #144672

#제출 시각아이디문제언어결과실행 시간메모리
144672TadijaSebezExamination (JOI19_examination)C++11
100 / 100
748 ms12604 KiB
#include <bits/stdc++.h> using namespace std; const int N=200050; int a[N],b[N],c[N],t[N],p[N]; int cdq1[N],cdq2[N],tmp[N],ans[N]; void CDQ2D(int id[], int l, int r) { if(l>=r) return; int mid=l+r>>1; CDQ2D(id,l,mid);CDQ2D(id,mid+1,r); int i=l,j=mid+1,k=l; int sum=0; while(k<=r) { if(j>r || (i<=mid && c[id[i]]>=c[id[j]])) { if(t[id[i]]==0 && p[id[i]]==0) sum++; tmp[k++]=id[i++]; } else { if(t[id[j]]==1 && p[id[j]]==1) ans[id[j]]+=sum; tmp[k++]=id[j++]; } } for(int z=l;z<=r;z++) id[z]=tmp[z]; } void CDQ1D(int id[], int l, int r) { if(l>=r) return; int mid=l+r>>1; CDQ1D(id,l,mid);CDQ1D(id,mid+1,r); int i=l,j=mid+1,k=l; while(k<=r) { if(j>r || (i<=mid && b[id[i]]>=b[id[j]])) p[tmp[k++]=id[i++]]=0; else p[tmp[k++]=id[j++]]=1; } for(int z=l;z<=r;z++) cdq2[z]=id[z]=tmp[z]; CDQ2D(cdq2,l,r); } int main() { int n,q; scanf("%i %i",&n,&q); for(int i=1;i<=n;i++) scanf("%i %i",&a[i],&b[i]),c[i]=a[i]+b[i],t[i]=0; for(int i=n+1;i<=n+q;i++) scanf("%i %i %i",&a[i],&b[i],&c[i]),t[i]=1; for(int i=1;i<=n+q;i++) cdq1[i]=i; sort(cdq1+1,cdq1+1+q+n,[&](int i, int j){ return make_pair(a[i],-t[i])>make_pair(a[j],-t[j]);}); CDQ1D(cdq1,1,n+q); for(int i=n+1;i<=n+q;i++) printf("%i\n",ans[i]); return 0; }

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

examination.cpp: In function 'void CDQ2D(int*, int, int)':
examination.cpp:9:11: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int mid=l+r>>1;
          ~^~
examination.cpp: In function 'void CDQ1D(int*, int, int)':
examination.cpp:31:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
     int mid=l+r>>1;
             ~^~
examination.cpp: In function 'int main()':
examination.cpp:45:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%i %i",&n,&q);
  ~~~~~^~~~~~~~~~~~~~~
examination.cpp:46:65: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=1;i<=n;i++) scanf("%i %i",&a[i],&b[i]),c[i]=a[i]+b[i],t[i]=0;
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
examination.cpp:47:63: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=n+1;i<=n+q;i++) scanf("%i %i %i",&a[i],&b[i],&c[i]),t[i]=1;
                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...