zoukankan      html  css  js  c++  java
  • bzoj 1878 HH的项链

    1878: [SDOI2009]HH的项链

    Time Limit: 4 Sec  Memory Limit: 64 MB
    Submit: 8273  Solved: 4004

    Description

    HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一
    段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此他的项链变得越来越长。有一天,他突然提出了一
    个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答。。。因为项链实在是太长了。于是,他只
    好求助睿智的你,来解决这个问题。

    Input

    第一行:一个整数N,表示项链的长度。 
    第二行:N个整数,表示依次表示项链中贝壳的编号(编号为0到1000000之间的整数)。 
    第三行:一个整数M,表示HH询问的个数。 
    接下来M行:每行两个整数,L和R(1 ≤ L ≤ R ≤ N),表示询问的区间。
    N ≤ 50000,M ≤ 200000。

    Output

    M行,每行一个整数,依次表示询问对应的答案。

    Sample Input

    6
    1 2 3 4 3 5
    3
    1 2
    3 5
    2 6

    Sample Output

    2
    2
    4
     
    题解:基础莫队。想通过莫队过掉这题的话,去bzoj上提交可以AC。洛谷的加强了数据,最后两个测试点会TLE。
     
    代码:
    #include<bits/stdc++.h>
    using namespace std;
    int w[1000010],n,m,block,ans[200010],cnt[1000010];
    struct node
    {
      int l,r,id;
      node(){}
      node(int id,int l,int r)
      {this->id=id;this->l=l;this->r=r;}
      bool operator <(const node&n) const
      {
        if(((l-1)/block)==((n.l-1)/block)) return r<n.r;
        else return l<n.l;
      }
    }seg[200010];
    void solve();
    void update(int &sum,int flag,int index);
    int main()
    {
      int i,a,b;
      scanf("%d",&n);
      block=sqrt(n);
      for(i=1;i<=n;i++) scanf("%d",&w[i]);
      scanf("%d",&m);
      for(i=1;i<=m;i++)
      {
        scanf("%d%d",&a,&b);
        seg[i]=node(i,a,b);
      }
      sort(seg+1,seg+1+m);
      solve();
      for(i=1;i<=m;i++) printf("%d
    ",ans[i]);
      return 0;
    }
    void update(int &sum,int flag,int index)
    {
      if(flag==1)
        {if(++cnt[w[index]]==1) sum++;}
      else
        {if(--cnt[w[index]]==0) sum--;}
    }
    void solve()
    {
      int i,l=1,r=0,sum=0;
      for(i=1;i<=m;i++)
      {
        while(r<seg[i].r) update(sum,1,++r);
        while(r>seg[i].r) update(sum,0,r--);
        while(l<seg[i].l) update(sum,0,l++);
        while(l>seg[i].l) update(sum,1,--l);
        ans[seg[i].id]=sum;
      }
    }
    本博客仅为本人学习,总结,归纳,交流所用,若文章中存在错误或有不当之处,十分抱歉,劳烦指出,不胜感激!!!
  • 相关阅读:
    topcoder srm 445 div1
    topcoder srm 440 div1
    topcoder srm 435 div1
    topcoder srm 430 div1
    topcoder srm 400 div1
    topcoder srm 380 div1
    topcoder srm 370 div1
    topcoder srm 425 div1
    WKWebView强大的新特性
    Runtime那些事
  • 原文地址:https://www.cnblogs.com/VividBinGo/p/11318681.html
Copyright © 2011-2022 走看看