Submission #983237

#TimeUsernameProblemLanguageResultExecution timeMemory
983237vjudge1Street Lamps (APIO19_street_lamps)C++17
60 / 100
225 ms23528 KiB
#include <time.h> #include <cstdlib> #include <stack> #include <numeric> #include <unordered_map> #include <unordered_set> #include <iomanip> #include <map> #include <set> #include <iterator> #include <deque> #include <queue> #include <sstream> #include <array> #include <string> #include <tuple> #include <chrono> #include <cassert> #include <cstdio> #include <cstring> #include <list> #include <iostream> #include <vector> #include <cmath> #include <algorithm> #include <bitset> using namespace std; int tt = 1, n; string s; int k[1001][1001]; int last[300005], kol[300005], l[300005], r[300005]; string type[300005]; int mx[4 * 300005]; void up(int l, int r, int ind, int num, int v){ if(l > ind || r < ind) return; if(l == r){ mx[v] = num; return; } int mid = (l + r) / 2; up(l, mid, ind, num, v * 2); up(mid + 1, r, ind, num, v * 2 + 1); mx[v] = max(mx[v * 2], mx[v * 2 + 1]); } int get_mx(int l, int r, int l1, int r1, int v){ if(l > r1 || l1 > r) return 0; if(l >= l1 && r1 >= r) return mx[v]; int mid = (l + r) / 2; return max(get_mx(l, mid, l1, r1, v * 2), get_mx(mid + 1, r, l1, r1, v * 2 + 1)); } int main(){ ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> n >> tt; cin >> s; if(n <= 100 && tt <= 100){ while(tt--){ string ss; cin >> ss; for(int i = 1; i <= n; i++){ for(int j = i + 1; j <= n + 1; j++){ if(s[j - 2] == '1') k[i][j]++; else break; } } if(ss[0] == 'q'){ int a, b; cin >> a >> b; cout << k[a][b] << "\n"; } else{ int p; cin >> p; if(s[p - 1] == '0') s[p - 1] = '1'; else s[p - 1] = '0'; } } return 0; } bool f = 0; for(int i = 1; i <= tt; i++){ cin >> type[i] >> l[i]; if(type[i][0] == 'q') cin >> r[i]; if(type[i][0] == 'q' && r[i] - 1 != l[i]) f = 1; } if(!f){ for(int i = 1; i <= tt; i++){ if(type[i][0] == 'q'){ int num = kol[l[i]]; if(s[l[i] - 1] == '1') num += (i - last[l[i]]); cout << num << "\n"; } else{ if(s[l[i] - 1] == '1'){ kol[l[i]] += (i - last[l[i]]); last[l[i]] = i; s[l[i] - 1] = '0'; } else{ last[l[i]] = i; s[l[i] - 1] = '1'; } } } return 0; } for(int i = 0; i < n; i++){ if(s[i] == '0') up(1, n, i + 1, 1e9, 1); } for(int i = 1; i <= tt; i++){ if(type[i][0] == 'q'){ cout << max(0, i - get_mx(1, n, l[i], r[i] - 1, 1)) << "\n"; } else{ up(1, n, l[i], i, 1); } } }
#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...