Submission #1297247

#TimeUsernameProblemLanguageResultExecution timeMemory
1297247NotLinuxFloppy (RMI20_floppy)C++20
100 / 100
57 ms6456 KiB
#include <stdlib.h> #include <string.h> #include "floppy.h" #include <bits/stdc++.h> using namespace std; #define sz(x) (int)x.size() #define all(x) x.begin() , x.end() void read_array(int subtask_id, const vector<int> &arr) { string bits; stack<int>st; for(int i = 0;i<sz(arr);i++){ while(!st.empty() and st.top() < arr[i]){ st.pop(); bits += '0'; } st.push(arr[i]); bits += '1'; } save_to_floppy(bits); } struct SEGT{ vector < pair<int,int> > t;// value index int tree_size; const pair<int,int> identity_element = {0,0}; pair<int,int> merge(pair<int,int> x , pair<int,int> y){ return max(x,y); } void init(int x){ tree_size = x+3; t.assign(2*tree_size , identity_element); } void modify(int p, pair<int,int> value) { // set value at position p for (t[p += tree_size] = value; p > 1; p >>= 1){ t[p>>1] = merge(t[p] , t[p^1]); } } int query(int l, int r) { // sum on interval [l, r] pair<int,int> res = identity_element; for (r+=1 , l += tree_size, r += tree_size; l < r; l >>= 1, r >>= 1) { if (l&1) res = merge(res , t[l++]); if (r&1) res = merge(res , t[--r]); } return res.second; } }; vector<int> solve_queries(int subtask_id, int n, const string &bits,const vector<int> &a, const vector<int> &b) { vector<int>tree[n+1]; stack<int>st; int sayac = 0 , arr[n+1]; for(int i = 1;i<=n;i++){ while(bits[sayac] == '0'){ st.pop(); sayac++; } if(!st.empty()) tree[st.top()].push_back(i); else tree[0].push_back(i); st.push(i); sayac++; } sayac = 1; function<void(int)> dfs = [&](int node){ for(auto itr : tree[node]) dfs(itr); arr[node] = sayac++; }; dfs(0); SEGT segt; segt.init(n+1); for(int i = 1;i<=n;i++){ segt.modify(i , {arr[i] , i}); } vector<int>answers; for(int i = 0;i<sz(a);i++){ answers.push_back(segt.query(a[i]+1 , b[i]+1)-1); } return answers; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...