Submission #144672

#TimeUsernameProblemLanguageResultExecution timeMemory
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;
}

Compilation message (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...