Submission #287892

#TimeUsernameProblemLanguageResultExecution timeMemory
287892tqbfjotldBigger segments (IZhO19_segments)C++14
13 / 100
1 ms416 KiB
#include <bits/stdc++.h> using namespace std; set<pair<pair<int,int>,int> >s; int arr[500005]; int suf[500005]; int ans[500005]; void add(pair<pair<int,int>,int> a){ //printf("inserting %d %d %d\n",a); auto it = s.lower_bound(a); while (it!=s.end() && (*it).second<=a.second){ it = s.erase(it); } if (it!=s.begin()){ it--; if ((*it).second>a.second){ return; } } s.insert(a); } int main(){ int n; scanf("%d",&n); for (int x = 0; x<n; x++){ scanf("%d",&arr[x]); } for (int x = n-1; x>=0; x--){ suf[x] = suf[x+1]+arr[x]; } s.insert({{-suf[0],0},0}); for (int x = 0; x<n; x++){ //printf("searching %d\n",-suf[x+1]); auto it = s.lower_bound({{-suf[x+1]+1,-1},-1}); assert(it!=s.begin()); it--; ans[x] = (*it).second+1; //printf("ans %d = %d\n",x,ans[x]); add({{suf[(*it).first.second]-2*suf[x+1],x+1},ans[x]}); } printf("%d",ans[n-1]); }

Compilation message (stderr)

segments.cpp: In function 'int main()':
segments.cpp:27:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   27 |     scanf("%d",&n);
      |     ~~~~~^~~~~~~~~
segments.cpp:29:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   29 |         scanf("%d",&arr[x]);
      |         ~~~~~^~~~~~~~~~~~~~
#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...