QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#506481#5459. Goose, goose, DUCK?cocoa_chan#WA 36ms101424kbC++172.3kb2024-08-05 17:58:182024-08-05 17:58:19

Judging History

This is the latest submission verdict.

  • [2024-08-05 17:58:19]
  • Judged
  • Verdict: WA
  • Time: 36ms
  • Memory: 101424kb
  • [2024-08-05 17:58:18]
  • Submitted

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'