이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#define sz size()
#define ll long long
using namespace std;
const ll N = 800800;
ll f[N], s[N], T = 1;
ll fget(ll i, ll res = 0)
{
    for(; i > 0; i -= (i & -i))
        res += f[i];
    return res;
}
void fupd(ll i, ll x)
{
    for(; i < N; i += (i & -i))
        f[i] = x;
}
ll get(ll l, ll r, ll res = 0)
{
    l += T - 1, r += T - 1;
    for(; l <= r; l >>= 1, r >>= 1)
    {
        if(l % 2 == 1) res = max(res, s[l++]);
        if(r % 2 == 0) res = max(res, s[r--]);
    }
    return res;
}
void upd(ll i, ll x)
{
    i += T - 1;
    s[i] = x;
    for(; i > 1; i >>= 1)
        s[i >> 1] = max(s[i], s[i ^ 1]);
}
ll cnt[205][205];
void solve()
{
    ll n, q, i, j, k;
    cin >> n >> q;
    while(T < n) T <<= 1;
    string s;
    cin >> s;
    ll a[n + 1], sum[n + 1] = {}, lst[n + 1] = {};
    for(i = 1; i <= n; ++i)
        a[i] = s[i - 1] - '0';
    if(n <= 200 && q <= 200)
    {
        for(i = 1; i <= n; ++i)
            for(j = i; j <= n; ++j)
            {
                if(!a[j]) break;
                ++cnt[i][j];
            }
        while(q--)
        {
            cin >> s;
            ll l, r;
            if(s == "toggle")
                cin >> l,
                    a[l] ^= 1;
            else
                cin >> l >> r,
                    cout << cnt[l][r - 1] << '\n';
            for(i = 1; i <= n; ++i)
                for(j = i; j <= n; ++j)
                {
                    if(!a[j]) break;
                    ++cnt[i][j];
                }
        }
        return;
    }
    string s1[q + 1];
    ll l1[q + 1], r1[q + 1];
    ll ok = 1;
    for(i = 1; i <= q; ++i)
    {
        cin >> s1[i] >> l1[i];
        if(s1[i] == "query")
        {
            cin >> r1[i];
            ok &= (r1[i] - l1[i] == 1);
        }
    }
    if(ok)
    {
        for(i = 1; i <= q; ++i)
        {
            s = s1[i];
            ll l = l1[i], r = r1[i];
            if(s == "toggle")
            {
                cin >> l;
                sum[l] += (i - lst[l]) * a[l];
                a[l] ^= 1;
                lst[l] = i;
                continue;
            }
            cin >> l >> r;
            cout << sum[l] + (i - lst[l]) * a[l] << '\n';
        }
        return;
    }
    for(i = 1; i <= q; ++i)
    {
        s = s1[i];
        ll l = l1[i], r = r1[i];
        if(s == "toggle")
        {
            fupd(l, 1);
            upd(l, q);
            continue;
        }
        ll ans = 0;
        if(fget(r - 1) - fget(l - 1) == r - l)
            ans = (i - get(l, r - 1));
        cout << ans << '\n';
    }
}
signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    solve();
}
컴파일 시 표준 에러 (stderr) 메시지
street_lamps.cpp: In function 'void solve()':
street_lamps.cpp:41:20: warning: unused variable 'k' [-Wunused-variable]
   41 |     ll n, q, i, j, k;
      |                    ^| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |