답안 #879158

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
879158 2023-11-26T14:12:51 Z dosts Growing Trees (BOI11_grow) C++17
0 / 100
103 ms 6984 KB
#include <bits/stdc++.h>
using namespace std;
#define sp << " " << 
#define int long long
#define vi vector<int>
#define F(xxx,yyy) for (int xxx=1;xxx<=yyy;xxx++)
#define pii pair<int,int>
const int N = 2e5+1;
vi a(N,0),bit(N,0);
int n;
void add(int p,int v) {
  for (int i=p;i<=n;i+=i&-i) bit[i]+=v;
} 
int get(int p) {
  int ans = 0;
  for (int i=p;i>0;i-=i&-i) ans+=bit[i];
  return ans;
} 
void solve() {
  int q;
  cin >> n >> q;
  F(i,n) cin >> a[i];
  sort(a.begin()+1,a.begin()+n+1);
  while (q--) {
    char cc;
    cin >> cc;
    if (cc == 'F') {
      int c,h;
      cin >> c >> h; 
      int l = 1;
      int r = n;
      while (l<=r) {
        int m = (l+r) >> 1; 
        if (get(m)+a[m] < h) l = m+1;
        else r = m-1;
      }
      if (l > n) continue;
      int L = l;
      int R = L+c-1;
      if (R >= n) {
        add(l,1);
        continue;
      }
      int x = a[R]+get(R);
      l = 1;
      r = n;
      while (l<=r) {
        int m = (l+r) >> 1;
        if (a[m]+get(m) < x) l = m+1;
        else r = m-1; 
      }
      int L2 = r+1;
      l = L2;
      r = n;
      while (l<=r) {
        int m = (l+r) >> 1;
        if (a[m]+get(m) <= x) l = m+1;
        else r = m-1;
      }
      int R2 = r;
      add(L,1);
      if(L2<n)add(L2+1,-1);
      add(R2-(c-(L2-L))+1,1);
      add(R2+1,-1);
    }
    else {
      int l,r;
      cin >> l >> r;
      int l2 = 1;
      int r2 = n;
      while (l2<=r2) {
        int m = (l2+r2) >> 1;
        if (a[m]+get(m) < l) l2 = m+1;
        else r2 = m-1;
      }
      int firs = r2+1;
      l2 = 1;
      r2 = n;
      while (l2<=r2) {
        int m = (l2+r2) >> 1;
        if (a[m]+get(m) <= r) l2 = m+1;
        else r2 = m-1;
      }
      int lst = r2;
      cout << lst-firs+1 << '\n';
    }
  }
}	
    
                 
                             
signed main() { 
  ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  #ifdef Local
  freopen("in","r",stdin);
  freopen("out","w",stdout);
  #endif
  int t = 1;
  //cin >> t;
	F(i,t) solve();
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 14 ms 6928 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 3420 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 12 ms 6984 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 5 ms 6744 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 18 ms 6748 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 23 ms 6740 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 14 ms 6748 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 94 ms 4196 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 28 ms 6736 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 103 ms 3904 KB Output isn't correct
2 Halted 0 ms 0 KB -