Submission #877715

#TimeUsernameProblemLanguageResultExecution timeMemory
877715dimashhhSequence (APIO23_sequence)C++17
7 / 100
929 ms48896 KiB
#include <bits/stdc++.h> #include "sequence.h" using namespace std; const int N = 5e5 + 1; typedef long long ll; int mn[N * 4],mx[N * 4],add[N * 4],n; void inc(int v,int val){ add[v] += val; mn[v] += val; mx[v] += val; } void push(int v){ if(add[v]){ inc(v + v,add[v]); inc(v + v +1,add[v]); add[v] = 0; } } void upd(int l,int r,int val,int v = 1,int tl = 1,int tr = n){ if(l > r || tl > r || l > tr){ return; } if(tl >= l && tr <= r){ inc(v,val); }else{ push(v); int tm = (tl + tr) >> 1; upd(l,r,val,v+v,tl,tm); upd(l,r,val,v+v+1,tm+1,tr); mn[v] = min(mn[v + v],mn[v + v + 1]); mx[v] = max(mx[v + v],mx[v + v + 1]); } } int get_min(int l,int r,int v = 1,int tl = 1,int tr = n){ if(l > r || tl > r || l > tr) return 1e9; if(tl >= l && tr <= r) return mn[v]; push(v); int tm = (tl + tr) >> 1; mn[v] = min(mn[v + v],mn[v + v + 1]); mx[v] = max(mx[v + v],mx[v + v + 1]); return min(get_min(l,r,v+v,tl,tm),get_min(l,r,v+v+1,tm+1,tr)); } int get_max(int l,int r,int v = 1,int tl = 1,int tr = n){ if(l > r || tl > r || l > tr) return -1e9; if(tl >= l && tr <= r) return mx[v]; push(v); int tm = (tl + tr) >> 1; mn[v] = min(mn[v + v],mn[v + v + 1]); mx[v] = max(mx[v + v],mx[v + v + 1]); return max(get_max(l,r,v+v,tl,tm),get_max(l,r,v+v+1,tm+1,tr)); } vector<int> pos[N]; bool inter(int l,int r,int l1,int r1){ return (min(r,r1) - max(l,l1) >= 0); } int sequence(int nn, std::vector<int> a) { n = nn; int mn = 1e9; for(int i = 0;i < nn;i++){ mn = min(mn,a[i]); pos[a[i]].push_back(i + 1); } for(int i = 1;i <= n;i++){ upd(i,n,1); } // cout << get_max(2,n) << "x\n"; // return 0; int res = 1; for(int i = 1;i <= n;i++){ for(int j:pos[i - 1]){ upd(j,n,-1); } for(int j:pos[i]){ upd(j,n,-1); } int it = 0; for(int j = 0;j < (int)pos[i].size();j++){ while(it < (int)pos[i].size()){ ll mn_sum = get_min(pos[i][it],n) - get_max(1,pos[i][j]); ll mx_sum = get_max(pos[i][it],n) - get_min(1,pos[i][j]); int len = (it - j + 1); // cout << pos[i][j] << ' ' << pos[i][it] << ' ' << mx_sum << ' ' << mn_sum << ' ' << inter(mn_sum,mx_sum,-len,len) << '\n'; if(mn_sum * mx_sum <= 0){ it++; }else{ break; } } res = max(res,it - j); } } /* */ return res; } // int main() { // int N; // assert(1 == scanf("%d", &N)); // std::vector<int> A(N); // for (int i = 0; i < N; ++i) { // assert(1 == scanf("%d", &A[i])); // } // int result = sequence(N, A); // printf("%d\n", result); // return 0; // }

Compilation message (stderr)

sequence.cpp: In function 'int sequence(int, std::vector<int>)':
sequence.cpp:82:21: warning: unused variable 'len' [-Wunused-variable]
   82 |                 int len = (it - j + 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...