Submission #1170038

#TimeUsernameProblemLanguageResultExecution timeMemory
1170038mkolko21Two Antennas (JOI19_antennas)C++20
0 / 100
158 ms14668 KiB
#include <iostream> #include <vector> using namespace std; const int roz=(1<<20); int tab[200'007][3]; int tree[(roz*2)+3][2]; vector<pair<int,int> > zmiany[200'007]; void dod(int v, int h) { v=v+roz; tree[v][0]=h; tree[v][1]=h; v=v/2; while(v>0){ if(tree[v*2]!=0 && tree[v*2+1]!=0) tree[v][0]=min(tree[v*2][0],tree[v*2+1][0]); else tree[v][0]=max(tree[v*2][0],tree[v*2+1][0]); tree[v][1]=max(tree[v*2][1],tree[v*2+1][1]); v=v/2; } } pair<int,int> szuk(int pocz, int kon) { pair<int,int> odp; pocz=pocz+roz-1; kon=kon+roz+1; while(pocz/2!=kon/2){ if(pocz%2==0){ if(odp.first==0) odp.first=tree[pocz+1][0]; if(tree[pocz+1][0]!=0) odp.first=min(odp.first,tree[pocz+1][0]); odp.second=max(odp.second,tree[pocz+1][1]); } if(kon%2==1){ if(odp.first==0) odp.first=tree[kon-1][0]; if(tree[pocz+1][0]!=0) odp.first=min(odp.first,tree[kon-1][0]); odp.second=max(odp.second,tree[kon-1][1]); } pocz=pocz/2;kon=kon/2; } return odp; } int fun(int pocz, int kon) { int odp=-1, p; for(int a=pocz; a<=kon; a++) { for(int i=0; i<zmiany[a].size(); i++) dod(zmiany[a][i].first,zmiany[a][i].second); zmiany[a].clear(); zmiany[min(kon+1,a+tab[a][1])].push_back({a,tab[a][0]}); zmiany[min(kon+1,a+tab[a][2]+1)].push_back({a,0}); p=szuk(max(pocz,a-tab[a][2]),max(pocz,a-tab[a][1])).first; if(a-tab[a][1]>=pocz && p!=0) odp=max(odp,abs(tab[a][0]-p)); p=szuk(max(pocz,a-tab[a][2]),max(pocz,a-tab[a][1])).second; if(a-tab[a][1]>=pocz && p!=0) odp=max(odp,abs(tab[a][0]-p)); } for(int i=0; i<zmiany[kon+1].size(); i++) dod(zmiany[kon+1][i].first,zmiany[kon+1][i].second); zmiany[kon+1].clear(); return odp; } int main() { int n, m, p, p2; cin>>n; for(int a=0; a<n; a++) for(int i=0; i<3; i++) cin>>tab[a][i]; cin>>m; for(int a=0; a<m; a++) { cin>>p>>p2; cout<<fun(p-1,p2-1)<<"\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...