제출 #91037

#제출 시각아이디문제언어결과실행 시간메모리
91037faustaadp말 (IOI15_horses)C++17
100 / 100
865 ms269016 KiB
#include "horses.h"
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
ll i,has=0,hz=1,x[505050],y[505050],PS=1,mo=1000000007,K,n;
ll ST[2020202],ST2[2020202],te,a[505050],ST3[2020202];
void upd(ll aa,ll bb,ll cc,ll dd,ll ee)
{
    if(aa==bb)
        ST[ee]=dd;
    else
    {
        ll ce=(aa+bb)/2;
        if(cc<=ce)upd(aa,ce,cc,dd,ee*2);
        else upd(ce+1,bb,cc,dd,ee*2+1);
        ST[ee]=(ST[ee*2]*ST[ee*2+1])%mo;
    }
}
void upd2(ll aa,ll bb,ll cc,ll dd,ll ee)
{
    if(aa==bb)
        ST2[ee]=dd;
    else
    {
        ll ce=(aa+bb)/2;
        if(cc<=ce)upd2(aa,ce,cc,dd,ee*2);
        else upd2(ce+1,bb,cc,dd,ee*2+1);
        ST2[ee]=(ST2[ee*2]+ST2[ee*2+1]);
    }
}
void upd3(ll aa,ll bb,ll cc,ll dd,ll ee)
{
    if(aa==bb)
        ST3[ee]=dd;
    else
    {
        ll ce=(aa+bb)/2;
        if(cc<=ce)upd3(aa,ce,cc,dd,ee*2);
        else upd3(ce+1,bb,cc,dd,ee*2+1);
        ST3[ee]=max(ST3[ee*2],ST3[ee*2+1]);
    }
}
ll cari(ll aa,ll bb,ll cc,ll ee)
{
    if(aa==bb)
    {
        a[++te]=aa;
    }
    else
    {
        ll ce=(aa+bb)/2;
        if(ST2[ee*2+1]==0)
            cari(aa,ce,cc,ee*2);
        else
        {
            if(cc<=ST2[ee*2+1])cari(ce+1,bb,cc,ee*2+1);
            else
            {
                cari(aa,ce,cc-ST2[ee*2+1],ee*2);
                cari(ce+1,bb,ST2[ee*2+1],ee*2+1);
            }
        }

    }
}
ll que(ll aa,ll bb,ll cc,ll dd,ll ee)
{
    if(bb<cc||dd<aa)return 1LL;
    else if(cc<=aa&&bb<=dd)return ST[ee];
    else
    {
        ll ce=(aa+bb)/2;
        return (que(aa,ce,cc,dd,ee*2)*que(ce+1,bb,cc,dd,ee*2+1))%mo;
    }
}
ll que3(ll aa,ll bb,ll cc,ll dd,ll ee)
{
    if(bb<cc||dd<aa)return 0LL;
    else if(cc<=aa&&bb<=dd)return ST3[ee];
    else
    {
        ll ce=(aa+bb)/2;
        return max(que3(aa,ce,cc,dd,ee*2),que3(ce+1,bb,cc,dd,ee*2+1));
    }
}
ll powo(ll aa,ll bb)
{
    if(bb==0)return 1LL;
    else
    {
        ll tem=powo(aa,bb/2);
        tem=(tem*tem)%mo;
        if(bb%2==1)tem=(tem*aa)%mo;
        return tem;
    }
}
ll com(ll aa,ll bb)
{
    return (que(0,n-1,0,aa,1)*bb)%mo;
}
ll jaw()
{
    te=0;
    //memset(a,-1,sizeof(a));
    cari(0,n-1,min(32LL,ST2[1]),1);
   // sort(a+1)
    ll opt=a[te],hz=y[a[te]],ii,Z=x[a[te]];
    //for(ii=1;ii<=te;ii++)   cout<<ii<<" "<<a[ii]<<"\n";
    for(ii=te-1;ii>=1;ii--)
    {
        if(Z>1000000000)return com(opt,hz);
        //cout<<que3(0,n-1,a[ii],a[ii+1]-1,1)<<"\n";
        if(que3(0,n-1,a[ii],a[ii+1]-1,1)>Z*hz)
        {
            opt=a[ii];
            hz=que3(0,n-1,a[ii],a[ii+1]-1,1);
            Z=1;
        }
        Z*=x[a[ii]];
    }
    return com(opt,hz);
}
int init(int N, int X[], int Y[])
{
    n=N;
    for(i=0;i<N;i++)x[i]=X[i];
    for(i=0;i<N;i++)upd(0,n-1,i,x[i],1);
    for(i=0;i<N;i++)upd2(0,n-1,i,((x[i]>1)||(i==0||i==(n-1))),1);
    for(i=0;i<N;i++)y[i]=Y[i];
    for(i=0;i<N;i++)upd3(0,n-1,i,y[i],1);
    //K=max(0LL,n-32LL);
    K=0;
	return jaw();
}

int updateX(int pos, int val)
{
    upd(0,n-1,pos,val,1);
    upd2(0,n-1,pos,((val>1)||(pos==0||pos==(n-1))),1);
    x[pos]=val;
	return jaw();
}

int updateY(int pos, int val)
{
    y[pos]=val;
    upd3(0,n-1,pos,val,1);
	return jaw();
}

컴파일 시 표준 에러 (stderr) 메시지

horses.cpp: In function 'long long int cari(long long int, long long int, long long int, long long int)':
horses.cpp:69:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
horses.cpp: In function 'long long int jaw()':
horses.cpp:111:18: warning: declaration of 'hz' shadows a global declaration [-Wshadow]
     ll opt=a[te],hz=y[a[te]],ii,Z=x[a[te]];
                  ^~
horses.cpp:9:12: note: shadowed declaration is here
 ll i,has=0,hz=1,x[505050],y[505050],PS=1,mo=1000000007,K,n;
            ^~
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:137:12: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  return jaw();
         ~~~^~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:145:12: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  return jaw();
         ~~~^~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:152:12: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  return jaw();
         ~~~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...