zoukankan      html  css  js  c++  java
  • 【尺取法】【Multiset】bzoj1342 [Baltic2007]Sound静音问题

    O(n)地枚举所有长度为k的段,每次暴力转移。

    转移的时候只是从最后插入一个数,从前面删去一个数。

    计算的时候要取当前的max和min。

    用multiset(∵元素是可重的)以上这些操作都是O(logn)的。

     1 #include<cstdio>
     2 #include<set>
     3 using namespace std;
     4 multiset<int>S;
     5 multiset<int>::iterator it;
     6 int n,m,limit; bool goal;
     7 int a[1000001];
     8 int main()
     9 {
    10     scanf("%d%d%d",&n,&m,&limit);
    11     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    12     for(int i=1;i<=m;i++) S.insert(a[i]);
    13     it=S.end(); it--;
    14     if((*it)-(*S.begin())<=limit) puts("1"),goal=1;
    15     for(int i=2;i<=n-m+1;i++)
    16       {
    17           S.erase(S.find(a[i-1]));
    18           S.insert(a[m+i-1]);
    19           it=S.end(); it--;
    20           if((*it)-(*S.begin())<=limit) printf("%d
    ",i),goal=1;
    21       }
    22     if(!goal) puts("NONE");
    23     return 0;
    24 }
  • 相关阅读:
    拥有最多糖果的孩子
    求1+2+…+n
    网络-中间代理
    Header中的Referer属性表示
    ios13.4post请求出现网错错误 network err
    10.8&10.10
    9.23&9.27
    9.16&9.19
    校内模拟赛划水报告(9.9,9.11)
    男人八题 划水题解
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/4064149.html
Copyright © 2011-2022 走看看