답안 #1044976

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1044976 2024-08-05T15:17:25 Z efedmrlr 가로등 (APIO19_street_lamps) C++17
0 / 100
100 ms 40104 KB
// #pragma GCC optimize("O3,Ofast,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <bits/stdc++.h>

using namespace std;


#define int long long int
#define MP make_pair
#define pb push_back
#define REP(i,n) for(int i = 0; (i) < (n); (i)++)
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()


void fastio() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
}


const double EPS = 0.00001;
const int INF = 1e9+500;
const int N = 3e5+5;
const int ALPH = 26;
const int LGN = 25;
constexpr int MOD = 1e9+7;
int n,m,q;

struct SegT {
    vector<int> data;
    int sz;
    void reset(int s) {
        sz = s;
        data.assign(2*sz + 5, 0);
    }
    void update(int ind, int val) {
        ind += sz;
        for(data[ind] = val; ind > 1; ind >>= 1) {
            data[ind >> 1] = max(data[ind], data[ind ^ 1]);
        } 
    }
    int query(int l, int r) { // [l, r)
        int ret = 0;
        for(l += sz, r += sz; l < r; l >>= 1, r >>= 1) {
            if(l & 1) ret = max(data[l++], ret);
            if(r & 1) ret = max(data[--r], ret);
        }
        return ret;
    }

};


inline void solve() {
    cin >> n >> q;
    string s;
    cin >> s;
    s = '$' + s;
    vector<vector<array<int, 2> > > upd(n + 2, vector<array<int, 2> >()); // (]
    vector<array<int, 3> > que;
    vector<int> tm(n + 2, 0);
    for(int z = 1; z <= q; z++) {
        string t;
        cin >> t;
        if(t == "toggle") {
            int i;
            cin >> i;
            if(s[i] == '0') {
                tm[i] = z;
                s[i] = '1';
            }
            else {
                upd[i].pb({tm[i], z});
                s[i] = '0';
            }
        }   
        else {
            int a, b;
            cin >> a >> b;
            que.pb({a, b, z});
        }
    } 
    for(int i = 1; i <= n; i++) {
        if(s[i] == '1') {
            upd[i].pb({tm[i], q});
        }
    }
    // for(int i = 1; i <= n; i++) {
    //     cout << "i:" << i << "\n\n";
    //     auto &x = upd[i];
    //     for(auto &c : x) {
    //         cout << c[0] << " " << c[1] << "\n";
    //     }
    // }
    vector<int> ans(q + 1, -1);
    SegT st;
    st.reset(n + 2);
    for(int i = 1; i <= n; i++) {
        for(auto c : upd[i]) {
            st.update(i, c[0] + 1);
        }
    }
    for(auto c : que) {
        int l = st.query(c[0], c[1]);
        ans[c[2]] = max(0ll, c[2] - l + 1);
    }
    for(int i = 0; i <= q; i++) {
        if(ans[i] == -1) continue;
        cout << ans[i] << "\n";
    }


}
 
signed main() {

    fastio();
    int test = 1;
    //cin>>test;
    while(test--) {
        solve();
    }
    
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 39 ms 9296 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 45 ms 27744 KB Output is correct
6 Correct 64 ms 30772 KB Output is correct
7 Correct 83 ms 33944 KB Output is correct
8 Correct 100 ms 40104 KB Output is correct
9 Correct 46 ms 10676 KB Output is correct
10 Correct 47 ms 16568 KB Output is correct
11 Correct 51 ms 15952 KB Output is correct
12 Incorrect 91 ms 29556 KB Output isn't correct
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -