230402026-01-16 11:07:25PappMatyasSzínezéscpp17Elfogadva 50/50409ms2548 KiB
#include <iostream>
#include <vector>

using namespace std;

string vals;
int length;

static char Invert(char a)
{
    return (a == '0') ? '1' : '0';
}

int main()
{
    int n, q;
    cin >> n >> q;

    cin >> vals;
    vector<int> changes(n);
    for(int i = 0; i < q; i++)
    {
        cin >> changes[i];
        changes[i]--;
    }

    length = vals.length();

    bool cz = (vals[0] == '0');
    int zchange = cz ? 1 : 0;
    int ochange = cz ? 0 : 1;
    for(int i = 1; i < length; i++)
    {
        char current = vals[i];
        if(current == '0')
        {
            if(!cz)
            {
                cz = true;
                zchange++;
            }
        }
        else
        {
            if(cz)
            {
                cz = false;
                ochange++;
            }
        }
    }
    int minim = min(ochange, zchange);
    cout << minim << endl;
    if(n == 1)
    {
        for(int i = 0; i < q; i++)
        {
            cout << 0 << endl;
        }
        return 0;
    }

    for(int i = 0; i < q; i++)
    {
        int cIndex = changes[i];
        vals[cIndex] = Invert(vals[cIndex]);
        char currentChar = vals[cIndex];
        if(cIndex == 0)
        {
            char nextChar = vals[cIndex + 1];
            if(currentChar == nextChar)
            {
                if(currentChar == '0')
                {
                    ochange--;
                }
                else
                {
                    zchange--;
                }
            }
            else
            {
                if(currentChar == '0')
                {
                    zchange++;
                }
                else
                {
                    ochange++;
                }
            }
        }
        else if(cIndex == n - 1)
        {
            char prevChar = vals[cIndex - 1];
            if(currentChar == prevChar)
            {
                if(currentChar == '0')
                {
                    ochange--;
                }
                else
                {
                    zchange--;
                }
            }
            else
            {
                if(currentChar == '0')
                {
                    zchange++;
                }
                else
                {
                    ochange++;
                }
            }
        }
        else
        {
            char prevChar = vals[cIndex - 1];
            char nextChar = vals[cIndex + 1];
            if(currentChar == prevChar)
            {
                if(currentChar == nextChar)
                {
                    ochange--;
                    zchange--;
                }
            }
            else
            {
                if(currentChar != nextChar)
                {
                    ochange++;
                    zchange++;
                }
            }
        }
        minim = min(ochange, zchange);
        cout << minim << endl;
    }
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms336 KiB
2Elfogadva0/03ms316 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/33ms316 KiB
8Elfogadva3/33ms316 KiB
9Elfogadva2/23ms408 KiB
10Elfogadva2/23ms316 KiB
11Elfogadva3/3393ms2544 KiB
12Elfogadva3/3391ms2540 KiB
13Elfogadva3/3407ms2540 KiB
14Elfogadva3/3405ms2548 KiB
15Elfogadva3/3409ms2548 KiB
16Elfogadva3/3395ms2524 KiB
17Elfogadva3/3395ms2532 KiB
18Elfogadva3/3405ms2544 KiB
19Elfogadva3/3389ms2500 KiB
20Elfogadva3/3409ms2496 KiB