답안 #1063553

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1063553 2024-08-17T20:23:21 Z MarwenElarbi 송신탑 (IOI22_towers) C++17
0 / 100
466 ms 4908 KB
#include <bits/stdc++.h>
using namespace std;
#include "towers.h"
#define pb push_back
#define ll long long
#define fi first
#define se second
const int nax=1e5+5;
int lefty[nax],righty[nax];
int segtree[nax*4];
int n;
vector<int> tab;
int pre[nax];
vector<int> ans;
void build(int pos,int l,int r){
  if(l==r){
    segtree[pos]=tab[l];
    return;
  }
  int mid=(r+l)/2;
  build(pos*2+1,l,mid);
  build(pos*2+2,mid+1,r);
  segtree[pos]=max(segtree[pos*2+1],segtree[pos*2+2]);
  return;
}
int query(int pos,int l,int r,int left,int right){
  if(l>r||l>right||r<left) return -1;
  if(l>=left&&r<=right) return segtree[pos];
  int mid=(r+l)/2;
  return max(query(pos*2+1,l,mid,left,right),query(pos*2+2,mid+1,r,left,right));
}
void init(int N, std::vector<int> H) {
  n=N;
  for (int i = 0; i < N; ++i)
  {
    tab.pb(H[i]);
  }
  stack<pair<int,int>> st;
  for (int i = 0; i < n; ++i)
  {
    while(!st.empty()){
      if(st.top().fi>tab[i]){
        st.pop();
      }else break;
    }
    lefty[i]=(!st.empty() ? st.top().se : -1);
    st.push({tab[i],i});
  }
  while(!st.empty()) st.pop();
  for (int i = n-1; i >= 0; --i)
  {
    while(!st.empty()){
      if(st.top().fi>tab[i]){
        st.pop();
      }else break;
    }
    righty[i]=(!st.empty() ? st.top().se : n);
    st.push({tab[i],i});
  }
  build(0,0,n-1);
  for (int i = 0; i < n; ++i)
  {
    int a=query(0,0,n-1,lefty[i]+1,i-1);
    int b=query(0,0,n-1,i+1,righty[i]-1);
    if(a<tab[i]) a=2e9;
    if(b<tab[i]) b=2e9;
    ans.pb(min(a,b)-tab[i]);
  }
  sort(ans.begin(),ans.end());
}

int max_towers(int L, int R, int D){
  int l=-1;
  int r=ans.size();
  while(r-l>1){
    int mid=(r+l)/2;
    if(ans[mid]<D) l=mid;
    else r=mid;
  }
  return max((int)ans.size()-r,1);
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 343 ms 4044 KB 1st lines differ - on the 1st token, expected: '1', found: '43842'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2392 KB 1st lines differ - on the 1st token, expected: '13', found: '395'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2392 KB 1st lines differ - on the 1st token, expected: '13', found: '395'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 466 ms 4908 KB 1st lines differ - on the 1st token, expected: '11903', found: '99308'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 213 ms 3084 KB 1st lines differ - on the 1st token, expected: '7197', found: '21490'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2392 KB 1st lines differ - on the 1st token, expected: '13', found: '395'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 343 ms 4044 KB 1st lines differ - on the 1st token, expected: '1', found: '43842'
2 Halted 0 ms 0 KB -