Submission #1292621

#TimeUsernameProblemLanguageResultExecution timeMemory
1292621MinbaevFactories (JOI14_factories)C++20
Compilation error
0 ms0 KiB
#include "factories.h" #include <bits/stdc++.h> using namespace std; using ll = long long; struct Seg { int n; vector<ll> tree, lazy; Seg(): n(0) {} Seg(int n_){ init(n_); } void init(int n_){ n = n_; tree.assign(4*n+5, 0); lazy.assign(4*n+5, LLONG_MAX); } inline void apply(int v, int l, int r, ll val){ tree[v] = val * (r - l + 1); lazy[v] = val; } inline void push(int v, int l, int r){ if(lazy[v]==LLONG_MAX) return; if(l!=r){ int m=(l+r)>>1; apply(v<<1, l, m, lazy[v]); apply(v<<1|1, m+1, r, lazy[v]); } lazy[v]=LLONG_MAX; } void upd(int v,int l,int r,int ql,int qr,ll val){ if(ql>qr || r<ql || qr<l) return; if(ql<=l && r<=qr){ apply(v,l,r,val); return; } push(v,l,r); int m=(l+r)>>1; upd(v<<1,l,m,ql,qr,val); upd(v<<1|1,m+1,r,ql,qr,val); tree[v]=tree[v<<1]+tree[v<<1|1]; } ll get(int v,int l,int r,int ql,int qr){ if(ql>qr || r<ql || qr<l) return 0; if(ql<=l && r<=qr) return tree[v]; push(v,l,r); int m=(l+r)>>1; return get(v<<1,l,m,ql,qr)+get(v<<1|1,m+1,r,ql,qr); } void range_assign(int l,int r,int val){ if(l>r) return; upd(1,1,n,l,r,(ll)val); } ll range_sum(int l,int r){ if(l>r) return 0; return get(1,1,n,l,r); } }; static int Nglob = 0; static vector<vector<pair<int,int>>> g; static vector<int> parent_v, sz_v, idv, id_rev, head; static vector<ll> dep; static int timer_; static Seg seg; void dfs(int u,int p){ parent_v[u]=p; sz_v[u]=1; for(auto &e: g[u]){ int v=e.first, w=e.second; if(v==p) continue; dep[v]=dep[u]+(ll)w; dfs(v,u); sz_v[u]+=sz_v[v]; } } void hld(int u,int p){ int heavy=-1; for(auto &e: g[u]){ int v=e.first; if(v==p) continue; if(heavy==-1 || sz_v[v]>sz_v[heavy]) heavy=v; } timer_++; idv[u]=timer_; id_rev[timer_]=u; if(heavy!=-1){ head[heavy]=head[u]; hld(heavy,u); } for(auto &e: g[u]){ int v=e.first; if(v==p || v==heavy) continue; head[v]=v; hld(v,u); } } int up_node(int x){ while(true){ int h=head[x]; int hid=idv[h], xid=idv[x]; if(hid+1 <= xid){ ll ones = seg.range_sum(hid+1, xid); ll need = (ll)(xid - hid); if(ones == need){ if(parent_v[h]==-1) return h; x = parent_v[h]; continue; } else { int L = hid+1, R = xid; while(L < R){

Compilation message (stderr)

factories.cpp: In function 'int up_node(int)':
factories.cpp:103:30: error: expected '}' at end of input
  103 |                 while(L < R){
      |                             ~^
factories.cpp:103:30: error: expected '}' at end of input
factories.cpp:101:20: note: to match this '{'
  101 |             } else {
      |                    ^
factories.cpp:103:30: error: expected '}' at end of input
  103 |                 while(L < R){
      |                              ^
factories.cpp:94:25: note: to match this '{'
   94 |         if(hid+1 <= xid){
      |                         ^
factories.cpp:103:30: error: expected '}' at end of input
  103 |                 while(L < R){
      |                              ^
factories.cpp:91:16: note: to match this '{'
   91 |     while(true){
      |                ^
factories.cpp:103:30: error: expected '}' at end of input
  103 |                 while(L < R){
      |                              ^
factories.cpp:90:19: note: to match this '{'
   90 | int up_node(int x){
      |                   ^