• bzoj1107:[POI2007]驾驶考试egz


    传送门

    有个非常显然的技巧,就是你可以反向建图,并且将图上下翻转,如果(i)能到其他所有道路,其他所有的道路也能到(i)
    这有什么好处呢,这就可以使(i)可以非常方便的转移到(i+1)
    我们设(f[i])(i)左边至少要建的公路数,然而(f[i]=i-1-lis)
    所以只要求lis就行了,树状数组/二分都行
    一个小细节:由于一条纵向公路上的横向公路有多条,他们之间可能会互相影响导致答案错误,所以要先更新答案再统一修改
    代码(作者自己写懵了,如有什么奇怪的地方请无视):

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    void read(int &x) {
    	char ch; bool ok;
    	for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;
    	for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
    }
    #define rg register
    const int maxn=1e5+10;
    int n,m,p,k,ans,now[maxn],f[maxn],fl[maxn],fr[maxn],l[maxn],r[maxn],ans1;
    vector<int>a[2][maxn];
    #define lowbit(i) (i&-i)
    void add(int x,int v){for(rg int i=x;i<=m;i+=lowbit(i))f[i]=max(v,f[i]);}
    int get(int x){int ans=0;for(rg int i=x;i;i-=lowbit(i))ans=max(ans,f[i]);return ans;}
    int main()
    {
    	read(n),read(m),read(p),read(k),m+=3;
    	for(rg int i=1,x,y,z;i<=p;i++)read(x),read(y),read(z),a[z^1][x].push_back(m-y);
    	for(rg int i=1;i<=n;i++)
    	{
    		int d=a[0][i].size();l[i]=l[i-1];
    		for(rg int j=0;j<d;j++)now[j]=get(a[0][i][j])+1,l[i]=max(now[j],l[i]);
    		for(rg int j=0;j<d;j++)add(a[0][i][j],now[j]);
    		fl[i]=max(i-l[i]-1,0);
    	}
    	for(rg int i=1;i<=m;i++)f[i]=0;
    	for(rg int i=n;i>=1;i--)
    	{
    		int d=a[1][i].size();r[i]=r[i+1];
    		for(rg int j=0;j<d;j++)now[j]=get(a[1][i][j])+1,r[i]=max(now[j],r[i]);
    		for(rg int j=0;j<d;j++)add(a[1][i][j],now[j]);
    		fr[i]=n-i-r[i];
    	}
    	for(rg int i=1;i<=n;i++)if(!(fl[i]+fr[i]))ans1++;
    	int ll=1,rr=1;
    	while(rr<=n&&ll<=rr)
    	{
    		while(rr<=n&&fl[rr]+fr[ll]<=k)rr++;
    		ans=max(ans,rr-ll);ll++;
    	}
    	printf("%d
    ",ans-ans1);
    }
    
  • 相关阅读:
    数组按行访问和按列访问的区别
    解决github中图片无法显示问题的策略
    C#验证帮助类(手机号、身份证等)
    WPF圆角按钮样式
    弗洛伊德的本我、自我与超我概念
    KEPServerEX OPCUA服务器地址配置
    C#List的一些操作
    梦、清醒梦、梦魇
    类说明head部格式
    阅读笔记20222
  • 原文地址:https://www.cnblogs.com/lcxer/p/10384922.html
Copyright © 2020-2023  润新知