5970 2023. 10. 07 07:25:42 Ancsa Színezés cpp11 Elfogadva 50/50 541ms 20516 KiB
#include <bits/stdc++.h>

using namespace std;
/*
5 3
01001
2
1
5

2
1
1
1
*/

/*
Be:
11 3
11000111001
1 11 8

Ki:
2 3 2 2
*/


int main()
{
    int n,q;
    cin>>n>>q;
    char sor[n];
    scanf("%s",sor);
    vector <int> valtasok(q);
    for(int i=0;i<q;i++)
        cin>>valtasok.at(i);

    int nullak=0, egyesek=0;

    if (sor[0]=='0')
        nullak++;
    else
        egyesek++;

    for(int i=1;i<n;i++)
    {
        if(sor[i]!=sor[i-1])
        {
            if (sor[i]=='0')
                nullak++;
            else
                egyesek++;
        }
    }
    cout<<min(nullak, egyesek)<<endl;

    for(int i=0;i<q;i++)
    {
        int index=valtasok.at(i)-1;
        if (index==0)
        {
            if (sor[0]=='0' && sor[1]=='0')
               egyesek++;
            else if (sor[0]=='1' && sor[1]=='1')
               nullak++;
            else if (sor[0]=='0' && sor[1]=='1')
               nullak--;
            else
                egyesek--;
        }
        else if (index==n-1)
        {
            if (sor[n-1]=='0' && sor[n-2]=='0')
               egyesek++;
            else if (sor[n-1]=='1' && sor[n-2]=='1')
               nullak++;
            else if (sor[n-1]=='0' && sor[n-2]=='1')
               nullak--;
            else
               egyesek--;
        }
        else
        {
            if (sor[index]=='0')
            {
                //csak 2 esetet dolgozok fel, a masik k;t esetben nem va;tozik a blokkok szama
                if (sor[index-1]=='0' && sor[index+1]=='0')
                {
                    nullak++;
                    egyesek++;
                }
                else if (sor[index-1]=='1' && sor[index+1]=='1')
                {
                    nullak--;
                    egyesek--;
                }
            }
            else  //a valtozas helyen 1 van
            {
                if (sor[index-1]=='0' && sor[index+1]=='0')
                {
                    nullak--;
                    egyesek--;
                }
                else if (sor[index-1]=='1' && sor[index+1]=='1')
                {
                    nullak++;
                    egyesek++;
                }
            }
        }
        if (sor[index]=='0')
           sor[index]='1';
        else
            sor[index]='0';

        cout<<min(nullak, egyesek)<<endl;
    }
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 3ms 1880 KiB
2 Elfogadva 0/0 4ms 2128 KiB
3 Elfogadva 2/2 3ms 2344 KiB
4 Elfogadva 2/2 2ms 2460 KiB
5 Elfogadva 3/3 3ms 2388 KiB
6 Elfogadva 3/3 3ms 2640 KiB
7 Elfogadva 3/3 4ms 3028 KiB
8 Elfogadva 3/3 4ms 3236 KiB
9 Elfogadva 2/2 4ms 3264 KiB
10 Elfogadva 2/2 4ms 3272 KiB
11 Elfogadva 3/3 456ms 6524 KiB
12 Elfogadva 3/3 541ms 7984 KiB
13 Elfogadva 3/3 335ms 9668 KiB
14 Elfogadva 3/3 398ms 11384 KiB
15 Elfogadva 3/3 328ms 12900 KiB
16 Elfogadva 3/3 312ms 14732 KiB
17 Elfogadva 3/3 402ms 16140 KiB
18 Elfogadva 3/3 437ms 17400 KiB
19 Elfogadva 3/3 513ms 18984 KiB
20 Elfogadva 3/3 481ms 20516 KiB