https://i2.wp.com/eblogarithm.com/wp-content/uploads/2017/08/Codeforces-Round-419-Div-1-problem-D-Karen-and-Cards-Solution-In-CC1.png?fit=640%2C360

Codeforces Round #419 (Div. 1), problem: (D) Karen and Cards Solution In C/C++

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 500010;
ll maxn[N<<2],minn[N<<2],sum[N<<2];
int n,p,q,r,tot=1,x[N],y[N],z[N];
ll ret=0;
vector<int> c[N];
void update(int a,int b,int x,int l,int r,int i)
{
if(a>r || l>b || minn[i]>x) return;
if(a<=l && r<=b && maxn[i]<=x)
{
maxn[i]=minn[i]=x;
sum[i]=(ll)(r-l+1)*x;
return;
}
int mid=(l+r)>>1;
if(maxn[i]==minn[i])
{
maxn[i<<1]=maxn[i<<1|1]=minn[i<<1]=minn[i<<1|1]=minn[i];
sum[i<<1]=sum[i<<1|1]=(r-mid)*minn[i];
}
update(a,b,x,l,mid,i<<1);
update(a,b,x,mid+1,r,i<<1|1);
maxn[i]=max(maxn[i<<1],maxn[i<<1|1]);
minn[i]=min(minn[i<<1],minn[i<<1|1]);
sum[i]=sum[i<<1]+sum[i<<1|1];
}
int main()
{
scanf(“%d%d%d%d”,&n,&p,&q,&r);
while(tot<=p) tot<<=1;
for(int i=0;i<n;i++)
{
scanf(“%d%d%d”,&x[i],&y[i],&z[i]);
c[z[i]].push_back(i);
update(1,x[i],y[i],1,tot,1);
}
for(int i=r;i;i–)
{
for(int k=0;k<c[i].size();k++)
{
int j=c[i][k];
update(1,x[j],q,1,tot,1);
update(1,p,y[j],1,tot,1);
}
ret+=sum[1];
}
cout<<(ll)(p)*q*r-ret;
return 0;
}

(Visited 16 times, 1 visits today)



There are no comments

Add yours

Leave a Reply

%d bloggers like this: