题目1496:数列区间

来源:互联网 发布:淘宝实时交易量 编辑:程序博客网 时间:2024/05/29 16:04
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring> using namespace std;#define MAXN 1000005#define MAXM 100005struct Op{    int l,r;};int num[MAXN];int next[MAXN];//next[i]=j;表示第i位之后的 第一个0出现在j这个位置上;Op op[MAXM];int n,m; int main(){    //freopen("in.txt","r",stdin);    while(scanf("%d%d",&n,&m)!=EOF)    {        memset(num,0,sizeof(num));        //cout<<"n="<<n<<"m="<<m<<endl;         for(int i=1;i<=n;i++)        {            next[i] = i+1;        }                 for(int i=1;i<=m;i++)        {            scanf("%d%d",&op[i].l,&op[i].r);        }                 for(int i=m;i>=1;i--)        {            for(int j = op[i].l;j<=op[i].r; )            {                //cout<<"main"<<endl;                if(num[j] == 0)                {                    num[j] = i;                }                int temp = next[j];                next[j] = next[op[i].r];                j = temp;            }            /*             for(int i=1;i<=n;i++)            {                printf("%d ",num[i]);            }            printf("\n");            */        }                 int ans = 0,cnt=1;        for(int i=2;i<=n;i++)        {            if(num[i]==num[i-1]&&num[i]!=0)            {                cnt ++;            }            else            {                if(ans < cnt)                {                    ans = cnt ;                }                cnt = 1;            }        }        if(ans < cnt)        {                         ans = cnt;        }        printf("%d\n",ans);    }    return 0;} /**************************************************************    Problem: 1496    User: cust123    Language: C++    Result: Accepted    Time:380 ms    Memory:10112 kb****************************************************************/

0 0
原创粉丝点击