Submission #898588

#TimeUsernameProblemLanguageResultExecution timeMemory
898588WhiteBigger segments (IZhO19_segments)C++14
0 / 100
1 ms348 KiB
#pragma GCC optimize <"O3">
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;

long long red[500005];
vector<long long>clr,cur;

long long binary(long long now){
    long long l=0,r=cur.size()-1,mid,kr=cur.size()-1;
    if(cur.empty())return -1;

    while(l<r){
        mid=(l+r)/2;
        if(cur[kr]-cur[mid]>=now)l=mid+1;
        else r=mid;
    }

    if(cur[kr]<now)return -1;
    if(cur[kr]-cur[l]<now)l--;
    if(l==-1)return -2;
    return l;
}

long long binary2(long long L,long long N){
    long long l=0,r=cur.size(),mid,kr=cur.size()-1;
    if(cur.empty())return -1;

    cur.push_back(1000000007);
    while(l<r){
        mid=(l+r)/2;
        //cout<<cur[kr]<<"()"<<cur[mid]<<endl;
        if(cur[kr]-cur[mid]+N<L+cur[mid])r=mid-1;
        else l=mid;
    }
    cur.pop_back();

    if(l==cur.size())l=-1;
    return l;
}

int main(){

    //ios_base::sync_with_stdio(false);
    //cin.tie(NULL);

    long long n;
    cin>>n;
    for(int i=0;i<n;i++)cin>>red[i];

    long long br=1,L=red[0];

    //cur.push_back(1);cur.push_back(3);cur.push_back(3);cur.push_back(3);cur.push_back(4);cur.push_back(4);
    //cout<<binary(0)<<endl;

    for(int i=1;i<n;i++){
            //cout<<"L: "<<L<<endl;
        long long N=red[i];
        if(N>=L){
            br++;
            long long kude=binary2(L,N);
            //cout<<kude<<endl;
            if(kude>-1)L=N+cur[cur.size()-1]-cur[kude];
            else L=N+cur[cur.size()-1];
            cur=clr;
        }else{
            long long kude=binary(L-N);
            //cout<<kude<<endl;
            if(kude==-1){
                if(cur.empty()==true)cur.push_back(N);
                else cur.push_back(cur[cur.size()-1]+N);
            }else{
                br++;
                if(kude>=0)L=N+cur[cur.size()-1]-cur[kude];
                else L=N+cur[cur.size()-1];
                while(cur.empty()==false)cur.pop_back();
            }
        }
    }
    cout<<br<<endl;

    return 0;
}

Compilation message (stderr)

segments.cpp:1:22: warning: '#pragma GCC optimize' is not a string or number [-Wpragmas]
    1 | #pragma GCC optimize <"O3">
      |                      ^
segments.cpp: In function 'long long int binary2(long long int, long long int)':
segments.cpp:38:9: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |     if(l==cur.size())l=-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...