CodeForces 220B Little Elephant and Array

来源:互联网 发布:数据分析工具python 编辑:程序博客网 时间:2024/06/05 17:37

B. Little Elephant and Array
time limit per test
4 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

The Little Elephant loves playing with arrays. He has array a, consisting of n positive integers, indexed from 1 ton. Let's denote the number with index i as ai.

Additionally the Little Elephant has m queries to the array, each query is characterised by a pair of integerslj andrj(1 ≤ lj ≤ rj ≤ n). For each querylj, rj the Little Elephant has to count, how many numbersx exist, such that number x occurs exactly x times among numbersalj, alj + 1, ..., arj.

Help the Little Elephant to count the answers to all queries.

Input

The first line contains two space-separated integers n andm (1 ≤ n, m ≤ 105) — the size of arraya and the number of queries to it. The next line containsn space-separated positive integers a1, a2,..., an(1 ≤ ai ≤ 109). Nextm lines contain descriptions of queries, one per line. Thej-th of these lines contains the description of thej-th query as two space-separated integerslj andrj(1 ≤ lj ≤ rj ≤ n).

Output

In m lines print m integers — the answers to the queries. The j-th line should contain the answer to the j-th query.

Sample test(s)
Input
7 23 1 2 2 3 3 71 73 4
Output
31

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <vector>#include <string>#include <queue>#include <ctime>#include <cstdlib>#include <stack>#include <map>#include <set>#include <list>#if ( _win32 || __win32__ )    #define lld "%i64d"#else    #define lld "%lld"#endif#define MP make_pair#define PB push_back#define INT_INF 0x3fffffff#define LL_INF 0x3fffffffffffffff#define EPS 1e-12#define MOD 1000000007#define PI 3.14159265358979323846#define N 100010#define E 100010using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef unsigned int Uint;typedef double DB;int a[N] , cnt[N];bool is[N];int s[500][N];int val[500];int main(){    int n,m;    while(~scanf("%d%d",&n,&m))    {        memset(cnt,0,sizeof(cnt));        memset(is,0,sizeof(is));        for(int i=1; i<=n; i++)        {            scanf("%d",a+i);            if(a[i]<=n && ++cnt[a[i]]==a[i]) is[a[i]]=1;        }        int tot=0;        memset(s,0,sizeof(s));        memset(val,0,sizeof(val));        for(int i=1; i<=n; i++)        {            if(!is[i]) continue;            for(int j=1; j<=n; j++)            {                s[tot][j]=s[tot][j-1];                if(a[j]==i) s[tot][j]++;            }            val[tot++]=i;        }        for(int ca=1,L,R; ca<=m; ca++)        {            scanf("%d%d",&L,&R);            int ans=0;            for(int i=0; i<tot; i++)                if(s[i][R]-s[i][L-1]==val[i]) ans++;            printf("%d\n",ans);        }    }    return 0;}


原创粉丝点击