Submission #68615

# Submission time Handle Problem Language Result Execution time Memory
68615 2018-08-17T14:27:43 Z MANcity Horses (IOI15_horses) C++14
100 / 100
337 ms 274900 KB
#include<iostream>
#include<cstdio>
#include<fstream>
#include<algorithm>
#include<cmath>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<string>
#include<cstring>
#include<vector>
#include "horses.h"
using namespace std;
#define for1(i,n) for(int i=1;i<=(int)n;i++)
#define for0(i,n) for(int i=0;i<=(int)n;i++)
#define forn(i,n) for(int i=n;i>=1;i--)
#define fo(i,x,y) for(int i=x;i<=(int)y;i++)
#define fr(i,x,y) for(int i=x;i>=(int)y;i--)
#define pb push_back
#define mp make_pair
#define LL long long
const LL Mod=1000*1000*1000+7;
int n;
LL X[600002];
LL Y[600002];
struct vert
{
    double gum;
    double ans;
    int pos;
}t[4*600002];
void combine(int v)
{
    if(t[2*v].ans>=(t[2*v].gum+t[2*v+1].ans))
    {
        t[v].ans=t[2*v].ans;
        t[v].pos=t[2*v].pos;
    }
    else
    {
        t[v].ans=(t[2*v].gum+t[2*v+1].ans);
        t[v].pos=t[2*v+1].pos;
    }
    t[v].gum=(t[2*v].gum+t[2*v+1].gum);
}
void build(int left,int right,int v)
{
    if(left==right)
    {
        t[v].gum=(double)log(X[left]);
        t[v].ans=(double)log(X[left])+(double)log(Y[left]);
        t[v].pos=left;
    }
    else
    {
        int m=(left+right)/2;
        build(left,m,2*v);
        build(m+1,right,2*v+1);
        combine(v);
    }
}
void update(int left,int right,int pos,int v)
{
    if(left==right)
    {
        t[v].gum=(double)log(X[left]);
        t[v].ans=(double)log(X[left])+(double)log(Y[left]);
        t[v].pos=left;
    }
    else
    {
        int m=(left+right)/2;
        if(pos<=m)
            update(left,m,pos,2*v);
        else
            update(m+1,right,pos,2*v+1);
        combine(v);
    }
}
LL mult[4*600002];
void build2(int left,int right,int v)
{
    if(left==right)
        mult[v]=X[left];
    else
    {
        int m=(left+right)/2;
        build2(left,m,2*v);
        build2(m+1,right,2*v+1);
        mult[v]=((LL)mult[2*v]*(LL)mult[2*v+1])%Mod;
    }
}
LL get2(int left,int right,int l,int r,int v)
{
    if(l>r)
        return 1;
    if(left==l && right==r)
        return mult[v];
    int m=(left+right)/2;
    LL A=get2(left,m,l,min(r,m),2*v);
    LL B=get2(m+1,right,max(l,m+1),r,2*v+1);
    return ((LL)A*(LL)B)%Mod;
}
void update2(int left,int right,int pos,int v)
{
    if(left==right)
    {
        mult[v]=X[left];
    }
    else
    {
        int m=(left+right)/2;
        if(pos<=m)
            update2(left,m,pos,2*v);
        else
            update2(m+1,right,pos,2*v+1);
        mult[v]=((LL)mult[2*v]*(LL)mult[2*v+1])%Mod;
    }
}
int init(int n_0, int x_0[], int y_0[]) {
    n=n_0;
    for1(i,n)
        X[i]=x_0[i-1];
    for1(i,n)
        Y[i]=y_0[i-1];
    build(1,n,1);
    build2(1,n,1);
    return ((LL)get2(1,n,1,t[1].pos,1)*(LL)Y[t[1].pos])%Mod;
}

int updateX(int pos, int val) {
    X[pos+1]=val;
    update(1,n,pos+1,1);
    update2(1,n,pos+1,1);
    return ((LL)get2(1,n,1,t[1].pos,1)*(LL)Y[t[1].pos])%Mod;
}

int updateY(int pos, int val) {
    Y[pos+1]=val;
    update(1,n,pos+1,1);
    return ((LL)get2(1,n,1,t[1].pos,1)*(LL)Y[t[1].pos])%Mod;
}

Compilation message

horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:129:56: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
     return ((LL)get2(1,n,1,t[1].pos,1)*(LL)Y[t[1].pos])%Mod;
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:136:56: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
     return ((LL)get2(1,n,1,t[1].pos,1)*(LL)Y[t[1].pos])%Mod;
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:142:56: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
     return ((LL)get2(1,n,1,t[1].pos,1)*(LL)Y[t[1].pos])%Mod;
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 488 KB Output is correct
3 Correct 3 ms 488 KB Output is correct
4 Correct 3 ms 544 KB Output is correct
5 Correct 3 ms 544 KB Output is correct
6 Correct 3 ms 544 KB Output is correct
7 Correct 2 ms 544 KB Output is correct
8 Correct 2 ms 544 KB Output is correct
9 Correct 2 ms 544 KB Output is correct
10 Correct 3 ms 544 KB Output is correct
11 Correct 2 ms 544 KB Output is correct
12 Correct 3 ms 656 KB Output is correct
13 Correct 3 ms 656 KB Output is correct
14 Correct 2 ms 656 KB Output is correct
15 Correct 3 ms 656 KB Output is correct
16 Correct 2 ms 656 KB Output is correct
17 Correct 2 ms 656 KB Output is correct
18 Correct 3 ms 656 KB Output is correct
19 Correct 2 ms 656 KB Output is correct
20 Correct 3 ms 656 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 716 KB Output is correct
2 Correct 3 ms 716 KB Output is correct
3 Correct 2 ms 724 KB Output is correct
4 Correct 2 ms 724 KB Output is correct
5 Correct 2 ms 724 KB Output is correct
6 Correct 3 ms 724 KB Output is correct
7 Correct 3 ms 724 KB Output is correct
8 Correct 2 ms 724 KB Output is correct
9 Correct 2 ms 724 KB Output is correct
10 Correct 2 ms 724 KB Output is correct
11 Correct 2 ms 724 KB Output is correct
12 Correct 2 ms 724 KB Output is correct
13 Correct 2 ms 724 KB Output is correct
14 Correct 2 ms 724 KB Output is correct
15 Correct 2 ms 724 KB Output is correct
16 Correct 2 ms 724 KB Output is correct
17 Correct 2 ms 724 KB Output is correct
18 Correct 2 ms 724 KB Output is correct
19 Correct 2 ms 724 KB Output is correct
20 Correct 2 ms 752 KB Output is correct
21 Correct 4 ms 752 KB Output is correct
22 Correct 3 ms 752 KB Output is correct
23 Correct 4 ms 752 KB Output is correct
24 Correct 3 ms 752 KB Output is correct
25 Correct 3 ms 752 KB Output is correct
26 Correct 2 ms 784 KB Output is correct
27 Correct 3 ms 784 KB Output is correct
28 Correct 3 ms 784 KB Output is correct
29 Correct 3 ms 784 KB Output is correct
30 Correct 3 ms 784 KB Output is correct
31 Correct 3 ms 784 KB Output is correct
32 Correct 2 ms 784 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 155 ms 47892 KB Output is correct
2 Correct 337 ms 60544 KB Output is correct
3 Correct 215 ms 64308 KB Output is correct
4 Correct 303 ms 71888 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 71888 KB Output is correct
2 Correct 2 ms 71888 KB Output is correct
3 Correct 2 ms 71888 KB Output is correct
4 Correct 3 ms 71888 KB Output is correct
5 Correct 3 ms 71888 KB Output is correct
6 Correct 2 ms 71888 KB Output is correct
7 Correct 2 ms 71888 KB Output is correct
8 Correct 2 ms 71888 KB Output is correct
9 Correct 2 ms 71888 KB Output is correct
10 Correct 2 ms 71888 KB Output is correct
11 Correct 2 ms 71888 KB Output is correct
12 Correct 2 ms 71888 KB Output is correct
13 Correct 2 ms 71888 KB Output is correct
14 Correct 2 ms 71888 KB Output is correct
15 Correct 2 ms 71888 KB Output is correct
16 Correct 2 ms 71888 KB Output is correct
17 Correct 2 ms 71888 KB Output is correct
18 Correct 2 ms 71888 KB Output is correct
19 Correct 2 ms 71888 KB Output is correct
20 Correct 2 ms 71888 KB Output is correct
21 Correct 2 ms 71888 KB Output is correct
22 Correct 2 ms 71888 KB Output is correct
23 Correct 3 ms 71888 KB Output is correct
24 Correct 3 ms 71888 KB Output is correct
25 Correct 3 ms 71888 KB Output is correct
26 Correct 3 ms 71888 KB Output is correct
27 Correct 3 ms 71888 KB Output is correct
28 Correct 3 ms 71888 KB Output is correct
29 Correct 4 ms 71888 KB Output is correct
30 Correct 3 ms 71888 KB Output is correct
31 Correct 3 ms 71888 KB Output is correct
32 Correct 3 ms 71888 KB Output is correct
33 Correct 104 ms 71888 KB Output is correct
34 Correct 111 ms 74872 KB Output is correct
35 Correct 152 ms 85964 KB Output is correct
36 Correct 137 ms 96740 KB Output is correct
37 Correct 78 ms 98852 KB Output is correct
38 Correct 136 ms 101880 KB Output is correct
39 Correct 70 ms 103740 KB Output is correct
40 Correct 115 ms 109796 KB Output is correct
41 Correct 64 ms 111932 KB Output is correct
42 Correct 66 ms 114144 KB Output is correct
43 Correct 111 ms 120280 KB Output is correct
44 Correct 119 ms 126620 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 126620 KB Output is correct
2 Correct 2 ms 126620 KB Output is correct
3 Correct 3 ms 126620 KB Output is correct
4 Correct 2 ms 126620 KB Output is correct
5 Correct 3 ms 126620 KB Output is correct
6 Correct 2 ms 126620 KB Output is correct
7 Correct 2 ms 126620 KB Output is correct
8 Correct 2 ms 126620 KB Output is correct
9 Correct 2 ms 126620 KB Output is correct
10 Correct 2 ms 126620 KB Output is correct
11 Correct 2 ms 126620 KB Output is correct
12 Correct 2 ms 126620 KB Output is correct
13 Correct 2 ms 126620 KB Output is correct
14 Correct 2 ms 126620 KB Output is correct
15 Correct 3 ms 126620 KB Output is correct
16 Correct 2 ms 126620 KB Output is correct
17 Correct 2 ms 126620 KB Output is correct
18 Correct 3 ms 126620 KB Output is correct
19 Correct 2 ms 126620 KB Output is correct
20 Correct 3 ms 126620 KB Output is correct
21 Correct 2 ms 126620 KB Output is correct
22 Correct 2 ms 126620 KB Output is correct
23 Correct 3 ms 126620 KB Output is correct
24 Correct 3 ms 126620 KB Output is correct
25 Correct 4 ms 126620 KB Output is correct
26 Correct 3 ms 126620 KB Output is correct
27 Correct 3 ms 126620 KB Output is correct
28 Correct 4 ms 126620 KB Output is correct
29 Correct 3 ms 126620 KB Output is correct
30 Correct 3 ms 126620 KB Output is correct
31 Correct 3 ms 126620 KB Output is correct
32 Correct 3 ms 126620 KB Output is correct
33 Correct 149 ms 129196 KB Output is correct
34 Correct 326 ms 141944 KB Output is correct
35 Correct 218 ms 145572 KB Output is correct
36 Correct 284 ms 153368 KB Output is correct
37 Correct 110 ms 156520 KB Output is correct
38 Correct 105 ms 160364 KB Output is correct
39 Correct 139 ms 171136 KB Output is correct
40 Correct 149 ms 181976 KB Output is correct
41 Correct 79 ms 184092 KB Output is correct
42 Correct 118 ms 187212 KB Output is correct
43 Correct 70 ms 189092 KB Output is correct
44 Correct 113 ms 195272 KB Output is correct
45 Correct 91 ms 197160 KB Output is correct
46 Correct 90 ms 199300 KB Output is correct
47 Correct 117 ms 205540 KB Output is correct
48 Correct 106 ms 212052 KB Output is correct
49 Correct 265 ms 218044 KB Output is correct
50 Correct 226 ms 223028 KB Output is correct
51 Correct 206 ms 234924 KB Output is correct
52 Correct 197 ms 246180 KB Output is correct
53 Correct 223 ms 249568 KB Output is correct
54 Correct 206 ms 253656 KB Output is correct
55 Correct 186 ms 255872 KB Output is correct
56 Correct 203 ms 263312 KB Output is correct
57 Correct 116 ms 266124 KB Output is correct
58 Correct 136 ms 269564 KB Output is correct
59 Correct 108 ms 274900 KB Output is correct