zoukankan      html  css  js  c++  java
  • POJ 1769 Minimizing maximizer(DP+zkw线段树)

    【题目链接】 http://poj.org/problem?id=1769

    【题目大意】

      给出一些排序器,能够将区间li到ri进行排序,排序器按一定顺序摆放
      问在排序器顺序不变的情况下,一定能够将最大值交换到最后一位至少需要保留几个排序器

    【题解】

      我们发现,对于每个排序器,dp[ri]=min(dp[ri],min(dp[li]~dp[ri-1])+1)
      我们用线段树对dp值进行最小值维护,顺序更新即可。

    【代码】

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <climits>
    using namespace std;
    const int N=50010;
    int T[N*4],n,m,M,l,r,x,y;
    int main(){
        while(~scanf("%d%d",&n,&m)){
            for(M=1;M<n;M<<=1);
            fill(T,T+M+n+1,INT_MAX/2);
            T[M+1]=0;
            while(m--){
                scanf("%d%d",&l,&r);
                if(l<r){
                    int t=INT_MAX/2;
                    x=l+M-1; y=r+M;
                    while(x^y^1>0){
                        if(~x&1)t=min(t,T[x+1]); 
                        if(y&1)t=min(t,T[y-1]); 
                        x>>=1;y>>=1;
                    }T[M+r]=min(T[M+r],t+1);
                    for(x=(M+r)/2;x;x/=2)T[x]=min(T[x<<1],T[(x<<1)^1]);
                }
            }printf("%d
    ",T[n+M]);
        }return 0;
    }
  • 相关阅读:
    什么是评审
    缺陷识别与缺陷跟踪
    白盒测试用例设计
    黑盒测试用例设计(二)
    黑盒测试用例设计技术
    Mysql基础
    JS函数
    SpringBoot整合JPA
    Python中的保留字
    操作系统的发展史
  • 原文地址:https://www.cnblogs.com/forever97/p/poj1769.html
Copyright © 2011-2022 走看看