Submission #983828

# Submission time Handle Problem Language Result Execution time Memory
983828 2024-05-16T07:03:35 Z vjudge1 Sequence (APIO23_sequence) C++17
20 / 100
707 ms 55632 KB
#include "sequence.h"
#include<bits/stdc++.h>
using namespace std;
struct info{
    int sum,mnl,mnr,mxl,mxr;
    info(int v){
        mnl=mnr=min(0,sum=v),mxl=mxr=max(0,v);
    }
    info(){
        sum=mnl=mnr=mxl=mxr=0;
    }
    info(info a,info b){
        sum=a.sum+b.sum;
        mnl=min(a.mnl,b.mnl+a.sum);
        mnr=min(b.mnr,a.mnr+b.sum);
        mxl=max(a.mxl,b.mxl+a.sum);
        mxr=max(b.mxr,a.mxr+b.sum);
    }
}T[1<<20];
void update(int i,int l,int r,int p,int x){
    if(l==r)
        return void(T[i]=info(x));
    if(p>l+r>>1)
        update(i*2+1,l+r+2>>1,r,p,x);
    else update(i*2,l,l+r>>1,p,x);
    T[i]=info(T[i*2],T[i*2+1]);
}
info query(int i,int l,int r,int ll,int rr){
    if(ll<=l&&r<=rr)
        return T[i];
    if(l>rr||ll>r)
        return T[0];
    return info(query(i*2,l,l+r>>1,ll,rr),
            query(i*2+1,l+r+2>>1,r,ll,rr));
}
int n=0;
bool ok(int l,int r,int cnt){
    int w=query(1,1,n,l,r).sum-cnt;
    if(w<0)
        return w+cnt+query(1,1,n,1,l-1).mxr+query(1,1,n,r+1,n).mxl>=0;
    return w-cnt+query(1,1,n,0,l-1).mnr+query(1,1,n,r+1,n).mnl<=0;
}
int sequence(int N, std::vector<int> A) {
    vector<int> p[N+1];
    n=N;
    for(int i=1;i<=N;i++)
        update(1,1,n,i,1),
        p[A[i-1]].push_back(i);
    int ans=0;
    for(int i=1;i<=N;i++){
        int r=0;
        for(int l=0;l<p[i].size();l++)
            while(r<p[i].size()&&ok(p[i][l],p[i][r],r-l+1))
                ans=max(ans,++r-l);
        for(auto j:p[i])
            update(1,1,n,j,-1);
    }
    return ans;
}

Compilation message

sequence.cpp: In function 'void update(int, int, int, int, int)':
sequence.cpp:23:11: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   23 |     if(p>l+r>>1)
      |          ~^~
sequence.cpp:24:25: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   24 |         update(i*2+1,l+r+2>>1,r,p,x);
      |                      ~~~^~
sequence.cpp:25:24: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   25 |     else update(i*2,l,l+r>>1,p,x);
      |                       ~^~
sequence.cpp: In function 'info query(int, int, int, int, int)':
sequence.cpp:33:30: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   33 |     return info(query(i*2,l,l+r>>1,ll,rr),
      |                             ~^~
sequence.cpp:34:28: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   34 |             query(i*2+1,l+r+2>>1,r,ll,rr));
      |                         ~~~^~
sequence.cpp: In function 'int sequence(int, std::vector<int>)':
sequence.cpp:52:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |         for(int l=0;l<p[i].size();l++)
      |                     ~^~~~~~~~~~~~
sequence.cpp:53:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |             while(r<p[i].size()&&ok(p[i][l],p[i][r],r-l+1))
      |                   ~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 5 ms 20824 KB Output is correct
2 Correct 5 ms 20828 KB Output is correct
3 Correct 5 ms 20828 KB Output is correct
4 Correct 6 ms 20828 KB Output is correct
5 Correct 5 ms 20828 KB Output is correct
6 Incorrect 5 ms 20828 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 20824 KB Output is correct
2 Correct 5 ms 20828 KB Output is correct
3 Correct 5 ms 20828 KB Output is correct
4 Correct 6 ms 20828 KB Output is correct
5 Correct 5 ms 20828 KB Output is correct
6 Incorrect 5 ms 20828 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 20824 KB Output is correct
2 Correct 506 ms 49844 KB Output is correct
3 Correct 535 ms 49780 KB Output is correct
4 Correct 583 ms 39680 KB Output is correct
5 Correct 544 ms 48816 KB Output is correct
6 Correct 491 ms 48664 KB Output is correct
7 Correct 513 ms 40532 KB Output is correct
8 Correct 581 ms 40596 KB Output is correct
9 Correct 539 ms 40168 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 20828 KB Output is correct
2 Incorrect 613 ms 40616 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 643 ms 55568 KB Output is correct
2 Correct 652 ms 55632 KB Output is correct
3 Correct 667 ms 54860 KB Output is correct
4 Correct 646 ms 54900 KB Output is correct
5 Correct 640 ms 51408 KB Output is correct
6 Correct 707 ms 51544 KB Output is correct
7 Correct 588 ms 50260 KB Output is correct
8 Correct 652 ms 50156 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 20824 KB Output is correct
2 Correct 5 ms 20828 KB Output is correct
3 Correct 5 ms 20828 KB Output is correct
4 Correct 6 ms 20828 KB Output is correct
5 Correct 5 ms 20828 KB Output is correct
6 Incorrect 5 ms 20828 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 20824 KB Output is correct
2 Correct 5 ms 20828 KB Output is correct
3 Correct 5 ms 20828 KB Output is correct
4 Correct 6 ms 20828 KB Output is correct
5 Correct 5 ms 20828 KB Output is correct
6 Incorrect 5 ms 20828 KB Output isn't correct
7 Halted 0 ms 0 KB -