Submission #745101

#TimeUsernameProblemLanguageResultExecution timeMemory
745101ItamarStreet Lamps (APIO19_street_lamps)C++14
0 / 100
411 ms524288 KiB

#include <iostream>
using namespace std;
#include<bitset>
#include<vector>
#define vi vector<int>

int main()
{
    int n, q;
    cin >> n >> q;
    const int siz = 3e5;
    bitset<siz> b;
    string s;
    cin >> s;
    vector<vi> ans(n,vi(n));
    for (int i = 0; i < n; i++)b[i] = (s[i] == '1');
    for (int i = 1; i <= q; i++) {
        string st;
        cin >> st;
        if (st == "toggle") {
            int in;
            cin >> in;
            in--;
            if (b[in]) {
                int x = in, y = in;
                while (x&&b[x])x--;
                while (y<n-1&&b[y])y++;
                for (int j = x; j <= y; j++) {
                    for (int k = x; k <= y; k++) {
                        ans[j][k] += i;
                    }
                }
                for (int j = x; j <= in-1; j++) {
                    for (int k = x; k <= in-1; k++) {
                        ans[j][k] -= i;
                    }
                }
                for (int j = in+1; j <=y; j++) {
                    for (int k = in+1; k <=y; k++) {
                        ans[j][k] -= i;
                    }
                }
                    b[in] = 0;
            }
            else {
                b[in] = 1;
                int x = in, y = in;
                while (x&&b[x])x--;
                while (y<n-1&&b[y])y++;
                for (int j = x; j <= y; j++) {
                    for (int k = x; k <= y; k++) {
                        ans[j][k] -= i;
                    }
                }
                for (int j = x; j <= in - 1; j++) {
                    for (int k = x; k <= in - 1; k++) {
                        ans[j][k] += i;
                    }
                }
                for (int j = in + 1; j <= y; j++) {
                    for (int k = in + 1; k <= y; k++) {
                        ans[j][k] += i;
                    }
                }
            }
        }
        else {
            int x, y;
            cin >> x >> y;
            x--, y -= 2;
            bool f = 1;
            for (int i = x; i <= y; i++)if (b[i] == 0)f = 0;
            cout << ans[x][y] + i *f << "\n";
        }
    }
}

// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu

#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...