제출 #267445

#제출 시각아이디문제언어결과실행 시간메모리
267445blue가로등 (APIO19_street_lamps)C++11
40 / 100
1319 ms5300 KiB
#include <iostream>
#include <vector>
using namespace std;

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

    if(n*n*q <= 2000000)
    {
        string S;
        cin >> S;

        bool on[n+1];
        for(int i = 1; i <= n; i++) on[i] = S[i-1] == '1';

        int drive[n+1][n+2];
        for(int a = 1; a <= n; a++) for(int b = a; b <= n+1; b++) drive[a][b] = 0;


        int A, B;

        for(int i = 1; i <= q; i++)
        {
            for(int a = 1; a <= n; a++)
            {
                for(int b = a+1; b <= n+1; b++)
                {
                    if(!on[b-1]) break;
                    drive[a][b]++;
                }
            }

            cin >> S;
            if(S == "toggle")
            {
                cin >> A;
                on[A] = !on[A];
            }
            else
            {
                cin >> A >> B;
                cout << drive[A][B] << '\n';
            }
        }
        return 0;
    }

    string S;
    cin >> S;

    vector<int> started(n+1, -1);
    vector<int> res(n+1, 0);
    for(int i = 1; i <= n; i++)
    {
        if(S[i-1] == '1') started[i] = 0;
    }


    int A, B;
    for(int i = 1; i <= q; i++)
    {
        cin >> S;
        if(S == "toggle")
        {
            cin >> A;
            if(started[A] == -1) started[A] = i;
            else
            {
                res[A] += i - started[A];
                started[A] = -1;
            }
        }
        else
        {
            cin >> A >> B;
            cout << res[A] + (started[A] != -1 ? i - started[A] : 0) << '\n';
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...