为什么手术手套分左右R和L洛谷 P4660 & bzoj 1168 [ Baltic OI 2008 ] 手套 —— 分析+单调栈

新闻资讯2026-04-17 13:29:28
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const xn=25;
int n,a[xn],b[xn],ansl,ansr,sta[1<<20],top;
struct N{
  int l,r;
  bool operator < (const N &y) const
  {return l==y.l?r<y.r:l<y.l;}//
}f[1<<20];
int rd()

  while(ch>='0'&&ch<='9')ret=(ret<<3)+(ret<<1)+ch-'0',ch=getchar();
  return f?ret:-ret;
}
void update(int x,int y)

int main()

  int mx=(1<<tot);
  for(int i=0;i<mx;i++)
      for(int j=1;j<=tot;j++)
    
  sort(f,f+mx);
  for(int i=0;i<mx;i++)
    {
      while(top&&f[sta[top]].r<f[i].r)top--;
      sta[++top]=i;
    }
  ansl=1e9; ansr=1e9;
  for(int i=1;i<top;i++)update(f[sta[i]].l+1,f[sta[i+1]].r+1);
  printf("%d
%d
",ansl+pl,ansr+pr);
  return 0;
}