Submission #336936

#TimeUsernameProblemLanguageResultExecution timeMemory
336936blueHorses (IOI15_horses)C++11
Compilation error
0 ms0 KiB
#include "horses.h"
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
using namespace std;


long long mod = 1e9 + 7;

class segtree
{
public:
    int l;
    int r;
    long long mx;
    long long p;

    segtree* left = NULL;
    segtree* right = NULL;

    segtree()
    {
        ;
    }

    segtree(int L, int R)
    {
        l = L;
        r = R;
        mx = p = 0;
        if(l == r) return;
        int m = (l+r)/2;
        left = new segtree(l, m);
        right = new segtree(m+1, r);
    }

    long long rangemax(int L, int R)
    {
        if(R < l || r < L) return 0;
        if(L <= l && r <= R) return mx;
        return max(left->rangemax(L, R), right->rangemax(L, R));
    }

    long long rangeprod(int L, int R)
    {
        if(R < l || r < L) return 1;
        if(L <= l && r <= R) return p;
        return (left->rangeprod(L, R) * right->rangeprod(L, R)) % mod;
    }

    void update(int I, long long V)
    {
        if(I < l || r < I) return;
        if(l == r) mx = p = V;
        else
        {
            left->update(I, V);
            right->update(I, V);
            mx = max(left->mx, right->mx);
            p = (left->p * right->p) % mod;
        }
    }
};



struct growth
{
    int i;
    int x;
};

bool operator < (growth A, growth B)
{
    return A.i > B.i;
}

int N;
segtree X;
segtree Y;
set<growth> Xset;

int compute()
{
    long long fullprod = 1;
    long long fullprod_pos = 0;
    for(growth g: Xset)
    {
        if(fullprod * g.x >= 1e9) break;
        fullprod *= g.x;
        fullprod_pos = g.i;
    }

    long long res = 1;
    int res_pos = 0;

    long long prod = 1;

    for(growth g: Xset)
    {
        prod *= g.x;
        if(X.rangeprod(fullprod_pos, g.i) * Y.rangemax(g.i, N-1) > res)
        {
            res = X.rangeprod(fullprod_pos, g.i) * Y.rangemax(g.i, N);
            res_pos = g.i;
        }
        if(prod >= 1e9) break;
    }
    return int( (X.rangeprod(0, g.i) * Y.rangemax(g.i, N-1)) % mod );
}

int init(int n, int x[], int y[])
{
    N = n;
    X = segtree(0, N-1);
    Y = segtree(0, N-1);

    for(int i = 0; i < N; i++)
    {
        X.update(i, x[i]);
        Y.update(i, y[i]);

        if(x[i] != 1) Xset.insert(growth{i, x[i]});
    }
    Xset.insert(growth{N, 1});

    return compute();
}

int updateX(int pos, int val)
{
    X.update(pos, val);
    Xset.erase(growth{pos, val});
    if(val != 1) Xset.insert(growth{pos, val});

    return compute();
}

int updateY(int pos, int val)
{
    Y.update(pos, val);
    return compute.
}

Compilation message (stderr)

horses.cpp:82:1: error: 'set' does not name a type
   82 | set<growth> Xset;
      | ^~~
horses.cpp: In function 'int compute()':
horses.cpp:88:19: error: 'Xset' was not declared in this scope
   88 |     for(growth g: Xset)
      |                   ^~~~
horses.cpp:90:21: warning: conversion from 'long long int' to 'double' may change value [-Wconversion]
   90 |         if(fullprod * g.x >= 1e9) break;
      |            ~~~~~~~~~^~~~~
horses.cpp:100:19: error: 'Xset' was not declared in this scope
  100 |     for(growth g: Xset)
      |                   ^~~~
horses.cpp:103:24: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  103 |         if(X.rangeprod(fullprod_pos, g.i) * Y.rangemax(g.i, N-1) > res)
      |                        ^~~~~~~~~~~~
horses.cpp:105:31: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  105 |             res = X.rangeprod(fullprod_pos, g.i) * Y.rangemax(g.i, N);
      |                               ^~~~~~~~~~~~
horses.cpp:108:12: warning: conversion from 'long long int' to 'double' may change value [-Wconversion]
  108 |         if(prod >= 1e9) break;
      |            ^~~~
horses.cpp:110:33: error: 'g' was not declared in this scope
  110 |     return int( (X.rangeprod(0, g.i) * Y.rangemax(g.i, N-1)) % mod );
      |                                 ^
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:124:23: error: 'Xset' was not declared in this scope
  124 |         if(x[i] != 1) Xset.insert(growth{i, x[i]});
      |                       ^~~~
horses.cpp:126:5: error: 'Xset' was not declared in this scope
  126 |     Xset.insert(growth{N, 1});
      |     ^~~~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:134:5: error: 'Xset' was not declared in this scope
  134 |     Xset.erase(growth{pos, val});
      |     ^~~~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:144:1: error: expected unqualified-id before '}' token
  144 | }
      | ^
horses.cpp:143:20: error: expected ';' before '}' token
  143 |     return compute.
      |                    ^
      |                    ;
  144 | }
      | ~