제출 #674151

#제출 시각아이디문제언어결과실행 시간메모리
674151DwightKSchruteGrowing Trees (BOI11_grow)C++17
100 / 100
218 ms4424 KiB
/* #pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") */ #include<bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> //using namespace __gnu_pbds; using namespace std; typedef long double ld; typedef long long ll; typedef unsigned long long ull; typedef vector<int>vi; typedef vector<vector<int>>vvi; typedef vector<ll>vl; typedef vector<vl> vvl; typedef pair<int,int>pi; typedef pair<ll,ll> pl; typedef vector<pl> vpl; typedef vector<ld> vld; typedef pair<ld,ld> pld; typedef vector<pi> vpi; //typedef tree<ll, null_type, less_equal<ll>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; template<typename T> ostream& operator<<(ostream& os, vector<T>& a){os<<"[";for(int i=0; i<ll(a.size()); i++){os << a[i] << ((i!=ll(a.size()-1)?" ":""));}os << "]\n"; return os;} #define all(x) x.begin(),x.end() #define YES out("YES") #define NO out("NO") #define out(x){cout << x << "\n"; return;} #define outfl(x){cout << x << endl;return;} #define GLHF ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL) #define print(x){for(auto ait:x) cout << ait << " "; cout << "\n";} #define pb push_back #define umap unordered_map template<typename T> void read(vector<T>& v){ int n=v.size(); for(int i=0; i<n; i++) cin >> v[i]; } template<typename T> vector<T>UNQ(vector<T>a){ vector<T>ans; for(T t:a) if(ans.empty() || t!=ans.back()) ans.push_back(t); return ans; } void solve(); int main(){ GLHF; int t=1; //cin >> t; while(t--) solve(); } struct seg{ vl t; int sz=1,n; seg(int _n):n(_n){ sz=2*n; t.resize(sz); } void add(int l,int r,ll v){ for(l+=sz/2,r+=sz/2 +1; l<r; l/=2,r/=2){ if(l&1)t[l++]+=v; if(r&1)t[--r]+=v; } } ll qur(ll i){ i+=sz/2; ll ans=0; while(i){ ans+=t[i]; i/=2; } return ans; } ll first_greater_equal(ll k){ ll l=0,r=n-1,ans=n; while(l<=r){ int m=(l+r)/2; if(qur(m)>=k) ans=m,r=m-1; else l=m+1; } return ans; } }; void solve() { //freopen("C:\\Users\\User\\Downloads\\boi2011_tests\\grow\\grow.g04A.in","r",stdin); ll n,q; cin >> n >> q; vl a(n); read(a); sort(all(a)); seg ST(n); for(int i=0; i<n; i++) ST.add(i,i,a[i]); while(q--){ char op; cin >> op; if(op=='C'){ int l,r; cin >> l >> r; int first = ST.first_greater_equal(l); int last = ST.first_greater_equal(r+1); cout << last-first << endl; continue; } ll c,h; cin >> c >> h; int first = ST.first_greater_equal(h); if(first==n) continue; c=min(c,n-first); int last = min(first+c-1,n-1); int height_last = ST.qur(last); last = ST.first_greater_equal(height_last)-1; ll p_last = last; ST.add(first,last,1); if(last==n-1) continue; c-= last-first+1; last = ST.first_greater_equal(height_last+1)-1; first = max(p_last+1,last-c+1); ST.add(first,last,1); } } /* 3 2 1 2 3 F 3 2 C 4 4 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...