Submission #274311

#TimeUsernameProblemLanguageResultExecution timeMemory
274311FashoSanta Claus (RMI19_santa)C++14
20 / 100
1100 ms2680 KiB
#include <bits/stdc++.h> #define N 100005 #define ll long long int #define fo(i,x,y) for(int i=x;i<=y;i++) #define fs(ar,n) fo(i,1,n) cin>>ar[i] #define sp " " #define fast cin.tie(0);cout.tie(0);ios_base::sync_with_stdio(false) #define pb push_back #define ppb pop_back #define fi first #define se second #define ii pair<int,int> #define lli pair<ll,ll> #define mod 1000000007 using namespace std; ll n,m,ar[N],sum,t,val[N],b[N],tutmac; bool check(int x,int y) { multiset<int> st; multiset<int> ::iterator it; fo(i,1,x-1) { if(b[i]==0) st.insert(val[i]); else { it=st.lower_bound(val[i]); ll a=*it; if(a<val[i] || st.count(a)<=0) continue; st.erase(it); } } fo(i,x,y) { if(b[i]==0) st.insert(val[i]); } // cout<<endl; // if(y==6 &&x==1) // cout<<"[d2]"<<endl; fo(i,x,y) { if(b[i]==1) { // if(y==6 &&x==1) // cout<<"[dd]"<<sp<<st.count(3)<<endl; it=st.lower_bound(val[i]); ll a=*it; if(a<val[i] || st.count(a)<=0) continue; // if(y==6 &&x==1) // cout<<a<<sp; st.erase(it); } } // if(y==6 && x==1) // cout<<"[ddd]"<<sp<<st.count(3)<<endl; // if(y==6 && x==1) // if(y==8) // { // cout<<endl; // cout<<"[d]"<<sp; // cout<<x<<sp<<st.size()<<endl; // } // cout<<endl<<"[d]"<<sp; // if(y==6 && x==1) // cout<<st.size()<<sp<<x<<endl; if(st.size() || tutmac>y) return 0; return 1; } ll bs(int l,int r,int x) { while(l<r) { if(l==r-1) { if(check(r,x)) l=r; break; } int mid=(l+r)/2; // if(x==8) // cout<<"[d3]"<<sp<<mid<<endl; if(check(mid,x)) l=mid; else r=mid-1; } if(!check(l,x)) return -1; return l; } int main() { fast; cin>>t; while(t--) { cin>>n; fs(ar,n); fs(b,n); fs(val,n); fo(i,1,n) if(b[i]==0) tutmac=i; fo(i,1,n) { ll x=bs(1,i,i); if(x==-1) { cout<<-1<<sp; continue; } cout<<ar[i]*2-ar[x]<<sp; } cout<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...