Submission #1044992

#TimeUsernameProblemLanguageResultExecution timeMemory
1044992efedmrlrStreet Lamps (APIO19_street_lamps)C++17
20 / 100
114 ms36000 KiB
// #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, INF); } 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(); } }
#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...