zoukankan      html  css  js  c++  java
  • codeforces 616D

    题意:给你n个数,找出一个最大的区间,满足:不同的数值个数不超过k;

        //我开始又看错题了、 以为是找出一个最大区间,里面的数的最大值不超过k;

    思路:利用一个窗口滑动,左端点表示当前位置,右端点表示目前这段数列符合要求, 每增加一个长度,判断是否合理,不然平移左端点。                         思路来自:http://blog.csdn.net/u011528035/article/details/50521870#;

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cmath>
     4 using namespace std;
     5 const int qq=1e6;
     6 int num[qq];
     7 int dp[qq];
     8 int l,r,k,n,ans,dif,p,q;    //定义的全局变量自动初始化为0(包括数组). 
     9 int main()
    10 {
    11     cin >> n >> k;
    12     l=r=1;
    13     for(int i=1;i<=n;++i){
    14         cin >> num[i];
    15         if(!dp[num[i]])    ++dif;
    16         dp[num[i]]++;
    17         r=i;
    18         if(dif>k){
    19             for(int j=l;j<=r;++j){
    20                 dp[num[j]]--;
    21                 if(!dp[num[j]]){
    22                     dif--;l=j+1;break;
    23                 }
    24             }
    25         }
    26         if(r-l+1>ans){
    27             ans=r-l+1;q=l;p=r;
    28         }
    29     }
    30     cout << q << " " << p << endl;
    31 }
  • 相关阅读:
    session_id 生成原理
    压缩后的数据 要经过 base64_encode 后才能在网络上传送
    MySQL ANALYZE TABLE
    mysql 优化2
    mysql 查询优化
    第归调用
    『GoLang』函数
    『GoLang』控制结构
    『GoLang』语法基础
    『Python』装饰器
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5133471.html
Copyright © 2011-2022 走看看