Submission #1256616

#TimeUsernameProblemLanguageResultExecution timeMemory
1256616DangerNoodle7591Xylophone (JOI18_xylophone)C++20
0 / 100
1 ms1008 KiB
#include <bits/stdc++.h> using namespace std; //#define lalala ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); //#define endl '\n' //#define int long long int #define ll long long #define NN 5005 #define carp 10000000 #define pb push_back #define p push #define ins insert #define f first #define s second int query(int s,int t); void answer(int i,int a); int cevler[NN]; /*int query(int s,int t){ //cout<<s<<" "<<t<<endl; int mn=NN,mx=-1; for(int i=s;i<=t;i++){ mn=min(mn,cevler[i]); mx=max(mx,cevler[i]); } //int a;cin>>a; return mx-mn; } void answer(int i,int a){ //cout<<a<<endl; if(cevler[i]!=a)cout<<"a "<<i<<" "<<cevler[i]<<" "<<a<<endl; int of; }*/ vector<int> arr[NN],seg[NN*4]; int deg[NN*4]; int val[NN]; void yap(int x,int fark,int kim){ vector<int> a[2],b[2]; a[0]=seg[x*2],b[0]=seg[x*2+1]; if(12){ int mx=0; for(auto u:a[0]){ mx=max(mx,u); } for(auto u:a[0])a[1].pb(mx-u); mx=0; for(auto u:b[0]){ mx=max(mx,u); } for(auto u:b[0])b[1].pb(mx-u); } int ind=0; int yes=0; for(int i=0;i<2&&kim!=1;i++){ for(int j=0;j<2;j++){ if(seg[x].size())break; set<int> st; int mx=0,son=0; for(auto u:a[i]){ mx=max(mx,u); son=u; st.ins(u); } int ok=1,okey=1; for(auto u:b[j]){ if(ok){ son-=u; ok=0;continue; } mx=max(mx,u+son); if(st.find(u+son)!=st.end()||u+son<0){okey=0;break;} //st.ins(u+son); } if(mx!=fark)okey=0; if(okey){ for(auto u:a[i])seg[x].pb(u); ok=1; for(auto u:b[j]){ if(ok){ ok=0;continue; } seg[x].pb(u+son); } } } } for(int i=0;i<2&&kim!=2;i++){ for(int j=0;j<2;j++){ if(seg[x].size())break; set<int> st; int mx=0,son=-1; for(auto u:b[j]){ mx=max(mx,u); if(son==-1)son=u; st.ins(u); } int ok=0,okey=1; //reverse(a[i].begin(),a[i].end()); //if(a[i].size()) if(a[i].size())son-=a[i][a[i].size()-1]; for(auto u:a[i]){ ok++; if(ok==a[i].size())break; mx=max(mx,u+son); if(st.find(u+son)!=st.end()||u+son<0){okey=0;break;} //st.ins(u+son); } if(mx!=fark)okey=0; if(okey){ for(auto u:a[i])seg[x].pb(u+son); ok=1; for(auto u:b[j]){ if(ok){ ok=0;continue; } seg[x].pb(u); } } } } } void bui(int x,int l,int r){ if(l>r)return; if(l==r){ seg[x]=arr[l]; deg[x]=val[l];return; } int mid=(l+r)/2; bui(x*2,l,mid);bui(x*2+1,mid+1,r); deg[x]=query(l,r+1); if(deg[x]==deg[x*2])yap(x,deg[x],2); else if(deg[x]==deg[x*2+1])yap(x,deg[x],1); else yap(x,deg[x],0); /*cout<<x<<" "<<l<<" "<<r+1<<": "<<deg[x]<<endl; for(int i=l;i<=r+1;i++){ cout<<cevler[i]<<" "; }cout<<endl; for(auto u:seg[x])cout<<u<<" "; cout<<endl<<endl;*/ } void solve(int N){ for(int i=1;i<N;i++){ int de=query(i,i+1); arr[i]={0,de}; val[i]=de; } bui(1,1,N-1); int ok=1; for(auto u:seg[1]){ if(u==0)break; if(u==N-1){ok=0;break;} } if(ok==0){ for(int i=0;i<seg[1].size();i++){ seg[1][i]=N-1-seg[1][i]; } } for(int i=0;i<seg[1].size();i++){ answer(i+1,seg[1][i]+1); } } /* signed main(){ //lalala; int n;cin>>n; for(int i=1;i<=n;i++)cin>>cevler[i]; solve(n); }*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...