QOJ.ac
QOJ
The 2nd Universal Cup Finals is coming! Check out our event page, schedule, and competition rules!
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#506481 | #5459. Goose, goose, DUCK? | cocoa_chan# | WA | 36ms | 101424kb | C++17 | 2.3kb | 2024-08-05 17:58:18 | 2024-08-05 17:58:19 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll n,m,i,j,k,l,r,x,y,z,w,s,t,a[1100000],b[1100000],num[2200000],lazy[2200000],mn[2200000],sum[2200000],numb[1100000];
vector<ll> v[1100000];
void propagate(ll x,ll y,ll z)
{
if(z<=1048575)
{
lazy[z*2]+=lazy[z];
lazy[z*2+1]+=lazy[z];
}
mn[z]+=lazy[z];
if(mn[z]==0)
sum[z]=num[z];
else
sum[z]=0;
lazy[z]=0;
}
void f(ll x,ll y,ll z,ll w)
{
propagate(x,y,z);
if(y<l||x>r)
return;
if(l<=x&&y<=r)
{
lazy[z]+=w;
propagate(x,y,z);
return;
}
f(x,(x+y)/2,z*2,w);
f((x+y)/2+1,y,z*2+1,w);
mn[z]=min(mn[z*2],mn[z*2+1]);
num[z]=0;
if(mn[z]==mn[z*2])
{
num[z]=num[z*2];
}
if(mn[z]==mn[z*2+1])
{
num[z]+=num[z*2+1];
}
if(mn[z]==0)
sum[z]=num[z];
else
sum[z]=0;
}
ll g(ll x,ll y,ll z)
{
propagate(x,y,z);
if(y<l||x>r)
return 0;
if(l<=x&&y<=r)
return sum[z];
return g(x,(x+y)/2,z*2)+g((x+y)/2+1,y,z*2+1);
}
void add(ll x,ll y)
{
l=x;
r=y;
f(1,1048576,1,1);
}
void del(ll x,ll y)
{
l=x;
r=y;
f(1,1048576,1,-1);
}
int main()
{
scanf("%lld %lld",&n,&k);
for(i=1;i<=1000000;i++)
v[i].push_back(1);
for(i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
v[a[i]].push_back(i);
b[a[i]]++;
numb[i]=b[a[i]];
num[i+1048575]=1;
sum[i+1048575]=1;
}
for(i=1048575;i>=1;i--)
{
mn[i]=min(mn[i*2],mn[i*2+1]);
if(mn[i]==mn[i*2])
num[i]+=num[i*2];
if(mn[i]==mn[i*2+1])
num[i]+=num[i*2+1];
if(mn[i]==0)
sum[i]=num[i];
}
for(i=1;i<=n;i++)
{
x=a[i];
// printf("[%lld]",numb[i]);
if(numb[i]==k)
{
add(v[x][0],v[x][1]);
// printf("{%lld,%lld}\n",v[x][0],v[x][1]);
}
else if(numb[i]>=k)
{
del(v[x][numb[i]-k-1],v[x][numb[i]-k]);
add(v[x][numb[i]-k],v[x][numb[i]-k+1]);
}
l=1;
r=i;
s+=g(1,1048576,1);
// printf("(%lld)",g(1,1048576,1));
}
printf("%lld",s);
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 36ms
memory: 100860kb
input:
6 2 1 2 2 1 3 3
output:
10
result:
ok 1 number(s): "10"
Test #2:
score: 0
Accepted
time: 24ms
memory: 101424kb
input:
6 1 1 2 3 4 5 6
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: -100
Wrong Answer
time: 27ms
memory: 101016kb
input:
100 10 142826 764475 142826 986320 764475 142826 142826 986320 764475 986320 764475 764475 764475 142826 142826 986320 764475 986320 764475 764475 142826 764475 142826 764475 986320 986320 764475 142826 764475 764475 142826 764475 764475 986320 142826 142826 142826 142826 764475 986320 986320 764475...
output:
4156
result:
wrong answer 1st numbers differ - expected: '4309', found: '4156'