hdu 6319 단조 대기 열 + 데이터 구조

999 단어
#include
using namespace std;
typedef long long ll;
ll a[10000005];
int main()
{
    int t,n,m,k;
    ll p,q,r,mod,ans1,ans2;
    scanf("%d",&t);
    while(t--&&scanf("%d%d%d%lld%lld%lld%lld",&n,&m,&k,&p,&q,&r,&mod)!=EOF)
    {
        for(int i=1;i<=k;++i)
            scanf("%lld",&a[i]);
        for(int i=k+1;i<=n;++i)
            a[i]=(p*a[i-1]+q*i+r)%mod;
        deque que;
        ans1=ans2=0;
        for(int i=n;i;--i)
        {
            while((que.size())&&(a[que.back()]<=a[i]))
                que.pop_back();
            while((que.size())&&(que.front()>=i+m))
                que.pop_front();
            que.push_back(i);
            if(i>n-m+1)
                continue;
            ans1+=(a[que.front()]^i);
            ans2+=(que.size()^i);
        }
        printf("%lld %lld
",ans1,ans2); } return 0; }

좋은 웹페이지 즐겨찾기