Submission #1170120

#TimeUsernameProblemLanguageResultExecution timeMemory
1170120user736482Two Antennas (JOI19_antennas)C++20
13 / 100
203 ms140416 KiB
#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define pb push_back #define ff first #define ss second #define MOD 998244353 #define POT 4194304 #define INF 1000000019 #define INFL 1000000000000000099LL ll n,q,a,b,c,d; vector<pair<pair<ll,ll>,ll>>v;//przexial ,wys ll co[2007][2007]; ll ans[2007][2007]; ll sgtree[POT][3];//dodane,mx,mn /*void add(ll pocz,ll kon,ll l,ll r,ll v,ll val){ if(l>kon || r<pocz)return; else if(l<=kon && r>=pocz){ sgtree[v][0]+=val; sgtree[v][1]+=val; sgtree[v][2]+=val; } else{ sgree[v*2][0]+=sgtree[v][0]; sgree[v*2][1]+=sgtree[v][0]; sgree[v*2+1][0]+=sgtree[v][0]; sgree[v*2+1][1]+=sgtree[v][0]; sgree[v*2][2]+=sgtree[v][0]; sgree[v*2+1][2]+=sgtree[v][0]; sgtree[v][0]=0; add(pocz,kon,l,(l+r)/2,v*2,val); add(pocz,kon,(l+r)/2+1,r,v*2,val); sgtree[v][1]=max(sgtree[v*2][1],sgtree[v*2+1][1]); sgtree[v][2]=min(sgtree[v*2][2],sgtree[v*2+1][2]); } }*/ void add(ll v,ll val){ if(sgtree[v][1]==val){ sgtree[v][1]=-INFL; sgtree[v][2]=INFL; } else{ sgtree[v][1]=val; sgtree[v][2]=val;} v/=2; while(v){ sgtree[v][1]=max(sgtree[v*2][1],sgtree[v*2+1][1]); sgtree[v][2]=min(sgtree[v*2][2],sgtree[v*2+1][2]); v/=2; } } ll mx(ll pocz,ll kon,ll l, ll r, ll v){ if(l>kon || r<pocz)return -INFL; if(l<=kon && r>=pocz)return sgtree[v][1]; return max(mx(pocz,kon,l,(l+r)/2,v*2),mx(pocz,kon,(l+r)/2+1,r,v*2+1)); } ll mn(ll pocz,ll kon,ll l, ll r, ll v){ if(l>kon || r<pocz)return INFL; if(l<=kon && r>=pocz)return sgtree[v][2]; return min(mn(pocz,kon,l,(l+r)/2,v*2),mn(pocz,kon,(l+r)/2+1,r,v*2+1)); } int main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n; for(ll i=0;i<n;i++){ cin>>a>>b>>c; v.pb({{b,c},a}); } if(n<=2000){ for(ll i=0;i<n;i++){ for(ll j=0;j<n;j++){ if(v[i].ff.ff<=abs(i-j) && abs(i-j)<=v[i].ff.ss && v[j].ff.ff<=abs(i-j) && abs(i-j)<=v[j].ff.ss){ co[i][j]=abs(v[i].ss-v[j].ss); } else{ co[i][j]=-1; } } } for(ll i=0;i<2007;i++){ for(ll j=0;j<2007;j++) ans[i][j]=-1; } for(ll j=1;j<n;j++){ for(ll i=0;j+i<n;i++){ ans[i][i+j]=max(max(ans[i+1][i+j],ans[i][j+i-1]),co[i][i+j]); } } cin>>q; // cout<<ans[2][4]<<"\n"; for(ll i=0;i<q;i++){ cin>>a>>b; a--; b--; cout<<ans[a][b]<<"\n"; } } else{ for(ll i=0;i<POT;i++){ sgtree[i][1]=-1; sgtree[i][2]=INFL; } ll wyn=-1; vector<pair<pair<ll,ll>,pair<ll,ll>>>op;//czas,typ, dodaj,policzz,odejmij for(ll i=0;i<n;i++){ op.pb({{i+1+v[i].ff.ff,-1},{i+1,i+1}}); op.pb({{i+1+v[i].ff.ss,1},{i+1,i+1}}); op.pb({{i+1,0},{i+1-v[i].ff.ff,i+1 -v[i].ff.ss}}); } sort(op.begin(),op.end()); while(op.size()){ auto pom=op.back(); op.pop_back(); //cout<<pom.ff.ff<<" "<<pom.ff.ss<<" "<<pom.ss.ff<<" "<<pom.ss.ss<<"\n"; if(pom.ff.ss!=0){ add(pom.ss.ss+POT/2-1,(v[pom.ss.ss-1].ss)); } else{ //cout<<v[pom.ff.ff-1].ss<<" "<<mx(pom.ss.ff,pom.ss.ss,1,POT/2,1)<<" "<<mn(pom.ss.ff,pom.ss.ss,1,POT/2,1) <<" "; wyn=max(wyn,v[pom.ff.ff-1].ss-mn(pom.ss.ff,pom.ss.ss,1,POT/2,1)); wyn=max(wyn,-v[pom.ff.ff-1].ss+mx(pom.ss.ff,pom.ss.ss,1,POT/2,1)); // cout<<wyn<<" "; } } cout<<wyn<<"\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...