Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Author haleyk10198 */
- /* §@ªÌ: haleyk10198 */
- #include <bits/stdc++.h>
- #define MOD 1000000007
- #define LINF (1LL<<60)
- #define INF 2147483647
- #define PI 3.1415926535897932384626433
- #define ll long long
- #define pii pair<int,int>
- #define mp(x,y) make_pair((x),(y))
- using namespace std;
- string itos(int x){
- stringstream ss;
- ss<<x;
- return ss.str();
- }
- int t,a[5010];
- int main(){
- //freopen("D-small-attempt3.in","r",stdin);
- //freopen("output.txt","w",stdout);
- ios_base::sync_with_stdio(false);
- cin>>t;
- for(int i=1;i<=t;i++){
- int n,p;
- cin>>n>>p;
- int mi=INF,mx=0,l=1;
- vector<pii> seg;
- for(int i=0;i<n;i++){
- cin>>a[i];
- mi=min(a[i],mi);
- mx=max(a[i],mx);
- if(mi==l&&mx==i+1){
- seg.push_back(mp(l-1,i));
- mi=INF,mx=0,l=i+2;
- }
- }
- int best=0;
- for(auto x:seg){
- int l=x.first,r=x.second;
- int now=0,mx=0,mi=INF,l0=INF,r0=0;
- for(int i=l;i<r;i++){
- mx=max(a[i],mx);
- mi=min(a[i],mi);
- if(mi==r+1-(i-l)&&mx==r+1){
- l0=min(l0,i);
- r0=i+1;
- }
- }
- if(l0<=r0){
- int sz=r-r0+1;
- now=1;
- l=x.first+sz+1,mi=INF,mx=0;
- int dx=0;
- for(int i=l0+1;i<r0;i++){
- mi=min(a[i],mi);
- mx=max(a[i],mx);
- if(mx-mi==dx++&&mi==l){
- now++;
- l+=dx;
- dx=0;
- mi=INF,mx=0;
- }
- }
- best=max(now,best);
- }
- }
- printf("Case #%d: %d\n",i,best+seg.size());
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement