hdu 5172 GTY's gay friends Hash随机算法

来源:互联网 发布:java list<> 编辑:程序博客网 时间:2024/03/28 18:35

BC的第29场的题,当时中文题目数据范围给的10^5,英文题目中是10^6,后来按照中文的数据范围,就线段树水过,但是我觉得不应该放在C,应该是英文的数据范围,我就说为什么这题放在C的位置。

好,我按照题解写了一发。


#include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<ctime>using namespace std;typedef unsigned __int64 ULL;ULL one=1;ULL ha[1000010];ULL a[1000010];ULL sum1[1000010];ULL sum2[1000010];int main(){    int n,m;    srand(time(NULL));    while(scanf("%d %d",&n,&m)!=EOF)    {        for(int i=1;i<=n;i++)        {            ha[i]=rand()*(one<<47)+rand()*(one<<31)+rand()*(one<<15)+rand();        }        for(int i=1;i<=n;i++)        {            int x;            scanf("%d",&x);            a[i]=ha[x];        }        sum1[0]=sum2[0]=0;        for(int i=1;i<=n;i++)        {            sum1[i]=sum1[i-1]^ha[i];            sum2[i]=sum2[i-1]^a[i];        }        for(int i=1;i<=m;i++)        {            int l,r;            scanf("%d %d",&l,&r);            ULL tmp1=sum1[r-l+1];            ULL tmp2=sum2[l-1]^sum2[r];            if(tmp1==tmp2)                printf("YES\n");            else printf("NO\n");        }    }    return 0;}


0 0
原创粉丝点击