(UPD: 2024-12-04 14:48 UTC) Judge is not working due to Cloudflare incident. (URL) We can do nothing about it, sorry. After the incident is resolved, we will grade all submissions.

Submission #1074635

#TimeUsernameProblemLanguageResultExecution timeMemory
1074635VictorMeetings (IOI18_meetings)C++17
0 / 100
35 ms3284 KiB
// #pragma GCC target ("avx,avx2,fma") // #pragma GCC optimize ("Ofast,inline") // O1 - O2 - O3 - Os - Ofast // #pragma GCC optimize ("unroll-loops") #include <bits/stdc++.h> #include "meetings.h" using namespace std; #define rep(i, a, b) for (ll i = (a); i < (b); ++i) #define per(i, a, b) for (ll i = (b) - 1; i >= (a); --i) #define trav(a, x) for (auto &a : x) #define all(x) x.begin(), x.end() #define sz(x) (ll)x.size() #define pb push_back #define debug(x) cout<<#x<<" = "<<x<<endl #define umap unordered_map #define uset unordered_set typedef pair<int, int> ii; typedef pair<int, ii> iii; typedef vector<int> vi; typedef vector<ii> vii; typedef vector<vi> vvi; typedef long long ll; typedef pair<ll,ll> pll; typedef pair<ll,pll> ppll; typedef vector<ll> vll; typedef vector<pll> vpll; typedef vector<vll> vvll; const ll INF = 1'000'000'007; vll dist; struct Node { ll val,suf,pref,lo,hi; Node *l,*r; Node(ll L,ll R) : lo(L),hi(R) { if(hi-lo==1) { if(dist[lo]==1) val=suf=pref=1; else val=suf=pref=0; } else { ll mid=(lo+hi)/2; l=new Node(lo,mid); r=new Node(mid,hi); auto item=comb({l->val,{l->pref,l->suf}},{r->val,{r->pref,r->suf}}); val=item.first; pref=item.second.first; suf=item.second.second; } } ppll query(ll L,ll R) { if(R<=lo||hi<=L) return {0,{0,0}}; if(L<=lo&&hi<=R) return {val,{pref,suf}}; auto a= comb(l->query(L,R),r->query(L,R)); //cout<<"lo = "<<lo<<" hi = "<<hi<<" val = "<<a.first<<" pref = "<<a.second.first<<" suf = "<<a.second.second<<endl; return a; } ppll comb(ppll a,ppll b) { ll curval,cursuf,curpref; curval=max(a.first,b.first); cursuf=b.second.second; curpref=a.second.first; if(a.first==l->hi-l->lo) curpref=a.first+b.second.first; if(b.first==r->hi-r->lo) cursuf=b.first+a.second.second; return {curval,{cursuf,curpref}}; } }; ll n,q; vll minimum_costs(vi H, vi L, vi R) { n=sz(H); q=sz(L); vll answers(q); ll pos=-1; dist.assign(n,-1); rep(i,0,n) dist[i]=H[i]; Node segtree(0,n); rep(i,0,q) { //cout<<"i = "<<i<<' '<<segtree.query(L[i],R[i]+1).first<<endl; answers[i]=(R[i]-L[i]+1)*2-segtree.query(L[i],R[i]+1).first; } return answers; } /** namespace { int read_int() { int x; if (scanf("%d", &x) != 1) { fprintf(stderr, "Error while reading input\n"); exit(1); } return x; } } // namespace int main() { int N = read_int(); int Q = read_int(); std::vector<int> H(N); for (int i = 0; i < N; ++i) { H[i] = read_int(); } std::vector<int> L(Q), R(Q); for (int j = 0; j < Q; ++j) { L[j] = read_int(); R[j] = read_int(); } std::vector<long long> C = minimum_costs(H, L, R); for (size_t j = 0; j < C.size(); ++j) { printf("%lld\n", C[j]); } return 0; }/**/

Compilation message (stderr)

meetings.cpp:131:2: warning: "/*" within comment [-Wcomment]
  131 | }/**/
      |   
meetings.cpp: In function 'vll minimum_costs(vi, vi, vi)':
meetings.cpp:87:5: warning: unused variable 'pos' [-Wunused-variable]
   87 |  ll pos=-1;
      |     ^~~
#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...