Submission #287894

#TimeUsernameProblemLanguageResultExecution timeMemory
287894tqbfjotldBigger segments (IZhO19_segments)C++14
100 / 100
399 ms48388 KiB
#include <bits/stdc++.h> using namespace std; #define int long long 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); } main(){ int n; scanf("%lld",&n); for (int x = 0; x<n; x++){ scanf("%lld",&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("%lld",ans[n-1]); }

Compilation message (stderr)

segments.cpp:26:7: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   26 |  main(){
      |       ^
segments.cpp: In function 'int main()':
segments.cpp:28:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   28 |     scanf("%lld",&n);
      |     ~~~~~^~~~~~~~~~~
segments.cpp:30:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   30 |         scanf("%lld",&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...