bzoj1878: [SDOI2009]HH的项链
生活随笔
收集整理的這篇文章主要介紹了
bzoj1878: [SDOI2009]HH的项链
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
樹狀數組的一類題目
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define clr(x,c) memset(x,c,sizeof(x)) int read(){int x=0;char c=getchar();while(!isdigit(c)) c=getchar();while(isdigit(c)) x=x*10+c-'0',c=getchar();return x; } const int nmax=50005; const int maxn=1000005; int sum[nmax],pos[maxn],next[nmax],a[nmax],n; struct node{int s,t,id,ans; }; node ns[nmax<<2]; bool cmp(node a,node b){return a.s<b.s||a.s==b.s&&a.t<b.t; } bool comp(node a,node b){return a.id<b.id; } void update(int x){for(int i=x;i<=n;i+=i&-i) sum[i]+=1; } int query(int x){int ans=0;for(int i=x;i;i-=i&-i) ans+=sum[i];return ans; } void maxs(int &a,int b){if(a<b) a=b; } int main(){n=read();int mx=-1;rep(i,1,n) a[i]=read(),maxs(mx,a[i]);dwn(i,n,1) next[i]=pos[a[i]],pos[a[i]]=i;rep(i,0,mx) if(pos[i]) update(pos[i]);int m=read();rep(i,1,m) ns[i].s=read(),ns[i].t=read(),ns[i].id=i;sort(ns+1,ns+m+1,cmp);int cur=1;rep(i,1,m){rep(j,cur,ns[i].s-1) if(next[j]) update(next[j]);cur=ns[i].s;ns[ns[i].id].ans=query(ns[i].t)-query(ns[i].s-1);}rep(i,1,m) printf("%d\n",ns[i].ans);return 0; }
1878: [SDOI2009]HH的項鏈
Time Limit:?4 Sec??Memory Limit:?64 MBSubmit:?3200??Solved:?1612
[Submit][Status][Discuss]
Description
HH有一串由各種漂亮的貝殼組成的項鏈。HH相信不同的貝殼會帶來好運,所以每次散步 完后,他都會隨意取出一段貝殼,思考它們所表達的含義。HH不斷地收集新的貝殼,因此, 他的項鏈變得越來越長。有一天,他突然提出了一個問題:某一段貝殼中,包含了多少種不同 的貝殼?這個問題很難回答。。。因為項鏈實在是太長了。于是,他只好求助睿智的你,來解 決這個問題。Input
第一行:一個整數N,表示項鏈的長度。 第二行:N個整數,表示依次表示項鏈中貝殼的編號(編號為0到1000000之間的整數)。 第三行:一個整數M,表示HH詢問的個數。 接下來M行:每行兩個整數,L和R(1 ≤ L ≤ R ≤ N),表示詢問的區間。Output
M行,每行一個整數,依次表示詢問對應的答案。Sample Input
61 2 3 4 3 5
3
1 2
3 5
2 6
Sample Output
22
4
HINT
對于20%的數據,N ≤ 100,M ≤ 1000;
對于40%的數據,N ≤ 3000,M ≤ 200000;
對于100%的數據,N ≤ 50000,M ≤ 200000。
Source
Day2
[Submit][Status][Discuss]轉載于:https://www.cnblogs.com/fighting-to-the-end/p/5859389.html
總結
以上是生活随笔為你收集整理的bzoj1878: [SDOI2009]HH的项链的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++学习基础八——重载输入和输出操作符
- 下一篇: 1. Spring boot 之热部署