# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
780933 | 2023-07-12T14:46:41 Z | Mouad_ouj | 송신탑 (IOI22_towers) | C++17 | 0 ms | 0 KB |
#include "towers.h" #include <bits/stdc++.h> using namespace std; vector<int> he; int k=0; void init (int n,int[] h) { he.resize(n); for(int x=0;x<n;x++) { he[x]=h[x]; if(h[x]>h[x+1] && x!=n) k=x; } if(h[n-1]>h[n-2]) k=n-1; } int max_towers(int l, int r, int d) { if(k>=r || k<=l) return 0; int ml=k,mr=r; while(ml!=mr) { int mid=(ml+mr)/2; if(he[mid]>he[k]-d) ml=mid+1; else mr=mid; } int a1=mr,a2=0; ml=l,mr=k; while(ml!=mr) { int mid=(ml+mr)/2; if(he[mid]<he[k]-d) ml=mid+1; else mr=mid; } a2=mr; return ((r-a2+1)*(a1-l+1)); }