제출 #1181662

#제출 시각아이디문제언어결과실행 시간메모리
1181662boclobanchatFloppy (RMI20_floppy)C++20
0 / 100
62 ms9284 KiB
#include"floppy.h" #include<bits/stdc++.h> using namespace std; #define ii pair<int,int> #define fi first #define se second int getlog(long long n) { return 63-__builtin_clzll(n); } void read_array(int subtask_id,const vector<int> &v) { string s; int n=v.size(); vector<int> val=v,lay(n); vector< vector<ii> > sp(22); sort(val.begin(),val.end()); for(int i=0;(1<<i)<=n;i++) sp[i].resize(n); for(int i=0;i<n;i++) sp[0][i]={lower_bound(val.begin(),val.end(),v[i])-val.begin(),i}; for(int i=1;(1<<i)<=n;i++) for(int j=0;j<=n-(1<<i);j++) sp[i][j]=max(sp[i-1][j],sp[i-1][j+(1<<(i-1))]); stack<ii> Q; Q.push({0,n-1}); while(!Q.empty()) { ii a=Q.top(); Q.pop(); int lg=getlog(a.se-a.fi+1),mxpos=max(sp[lg][a.fi],sp[lg][a.se-(1<<lg)+1]).se; ii b={a.fi,mxpos-1},c={mxpos+1,a.se}; if(c.fi<=c.se) { int lg2=getlog(c.se-c.fi+1),mxpos2=max(sp[lg2][c.fi],sp[lg2][c.se-(1<<lg2)+1]).se; Q.push(c),s+='1'; } else s+='0'; if(b.fi<=b.se) { int lg2=getlog(b.se-b.fi+1),mxpos2=max(sp[lg2][b.fi],sp[lg2][b.se-(1<<lg2)+1]).se; Q.push(b),s+='1'; } else s+='0'; } save_to_floppy(s); } vector<int> solve_queries(int subtask_id,int n,const string &s,const vector<int> &a,const vector<int> &b) { stack<int> st; st.push(0); vector<int> ans,lay(n); int val=0,pos=0,cnt=0,it=0; while(!st.empty()) { int a=st.top(); st.pop(); if(a==-1) lay[pos++]=cnt; else if(a==-2) cnt--; else { bool lt=s[it*2]-'0',rt=s[it*2+1]-'0'; cnt++,it++; st.push(-2); if(rt) st.push(0); st.push(-1); if(lt) st.push(0); } } vector< vector<ii> > sp(22); for(int i=0;(1<<i)<=n;i++) sp[i].resize(n); for(int i=0;i<n;i++) sp[0][i]={lay[i],i}; for(int i=1;(1<<i)<=n;i++) for(int j=0;j<=n-(1<<i);j++) sp[i][j]=min(sp[i-1][j],sp[i-1][j+(1<<(i-1))]); for(int i=0;i<a.size();i++) { int l=a[i],r=b[i],lg=getlog(r-l+1); ans.push_back(min(sp[lg][l],sp[lg][r-(1<<lg)+1]).se); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...