59702023-10-07 07:25:42AncsaSzínezéscpp11Accepted 50/50541ms20516 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;
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/03ms1880 KiB
2Accepted0/04ms2128 KiB
3Accepted2/23ms2344 KiB
4Accepted2/22ms2460 KiB
5Accepted3/33ms2388 KiB
6Accepted3/33ms2640 KiB
7Accepted3/34ms3028 KiB
8Accepted3/34ms3236 KiB
9Accepted2/24ms3264 KiB
10Accepted2/24ms3272 KiB
11Accepted3/3456ms6524 KiB
12Accepted3/3541ms7984 KiB
13Accepted3/3335ms9668 KiB
14Accepted3/3398ms11384 KiB
15Accepted3/3328ms12900 KiB
16Accepted3/3312ms14732 KiB
17Accepted3/3402ms16140 KiB
18Accepted3/3437ms17400 KiB
19Accepted3/3513ms18984 KiB
20Accepted3/3481ms20516 KiB