Submission #859488

#TimeUsernameProblemLanguageResultExecution timeMemory
859488HoriaHaivasSum Zero (RMI20_sumzero)C++14
Compilation error
0 ms0 KiB
/*
    "care a facut teste cu Lattice reduction attack e ciudat"
    - 2023 -
*/
#include<bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
#pragma GCC optimize("Ofast")

using namespace std;

struct secv
{
    int l;
    int r;
    int nodeval;
};

struct cmp
{
    bool operator()(secv a, secv b)
    {
        return a.r>b.r;
    }
};

bool cmp2 (secv a, secv b)
{
    return a.l<b.l;
}

int v[100005];
long long sp[100005];
map<long long,int> last;
priority_queue<secv,vector<secv>,cmp> pq;
secv perechi[100005];
int up[17][100005];
int firstseq[100005];

secv jumpto(int node, int steps)
{
    //debug(node);
    //debug(steps);
    int i,j;
    for (j=0; j<=16; j++)
    {
        if (steps&(1<<j))
            node=up[j][node];
    }
    //debug(node);
    return perechi[node];
}

int main()
{
    //ifstream fin("stramosi.in");
    //ofstream fout("stramosi.out");
    ios_base::sync_with_stdio(false);
    cin.tie();
    cout.tie();
    int n,q,i,j,k,cnt,best,it,mi,a,b,r,pas;
    cin >> n;
    for (j=1; j<=n; j++)
    {
        cin >> v[j];
        sp[j]=sp[j-1]+v[j];
    }
    cnt=0;
    for (j=1; j<=n; j++)
    {
        if (sp[j]==0)
        {
            cnt++;
            perechi[cnt].l=last[sp[j]]+1;
            perechi[cnt].r=j;
        }
        else
        {
            if (last[sp[j]]!=0)
            {
                cnt++;
                perechi[cnt].l=last[sp[j]]+1;
                perechi[cnt].r=j;
            }
        }
        last[sp[j]]=j;
    }
    sort(perechi+1,perechi+1+cnt,cmp2);
    for (j=1; j<=cnt; j++)
        perechi[j].nodeval=j;
    for (j=1; j<=cnt; j++)
    {
        /*
        debug(perechi[j].l);
        debug(perechi[j].r);
        cerr << "\n";
        */
        if (!pq.empty() && pq.top().r<perechi[j].l)
        {
            while (!pq.empty() && pq.top().r<perechi[j].l)
            {
                up[0][pq.top().nodeval]=perechi[j].nodeval;
                pq.pop();
            }
        }

        pq.push(perechi[j]);
        /*
        debug(pq.top().l);
        debug(pq.top().r);
        */
    }
    while (!pq.empty())
    {
        up[0][pq.top().nodeval]=0;
        pq.pop();
    }
    perechi[0].l=n+1;
    perechi[0].r=n+1;
    perechi[0].nodeval=0;
    it=cnt;
    best=0;
    for (j=n; j>=1; j--)
    {
        if (perechi[it].l==j)
        {
            if (perechi[it].r<perechi[best].r)
            {
                best=it;
            }
            it--;
        }
        firstseq[j]=best;
        /*
        debugs(j);
        debug(firstseq[j]);
        */
    }
    for (j=1; j<=16; j++)
    {
        for (i=1; i<=cnt; i++)
        {
            up[j][i]=up[j-1][up[j-1][i]];
        }
    }
    cin >> q;
    for (j=1; j<=q; j++)
    {
        cin >> a >> b;
        r=0;
        pas=(1<<16);
        while (pas)
        {
            if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
                r+=pas;
            pas=pas/2;
        }
        cout << r+1 << "\n";
    }
    return 0;
}

Compilation message (stderr)

sumzero.cpp: In function 'secv jumpto(int, int)':
sumzero.cpp:44:9: warning: unused variable 'i' [-Wunused-variable]
   44 |     int i,j;
      |         ^
sumzero.cpp: In function 'int main()':
sumzero.cpp:154:56: error: no match for 'operator!=' (operand types are 'secv' and 'int')
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                               ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
      |                                     |                    |
      |                                     secv                 int
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/regex.h:1064:5: note: candidate: 'template<class _BiIter> bool std::__cxx11::operator!=(const std::__cxx11::sub_match<_BiIter>&, const std::__cxx11::sub_match<_BiIter>&)'
 1064 |     operator!=(const sub_match<_BiIter>& __lhs, const sub_match<_BiIter>& __rhs)
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1064:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/regex.h:1144:5: note: candidate: 'template<class _Bi_iter, class _Ch_traits, class _Ch_alloc> bool std::__cxx11::operator!=(std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>&, const std::__cxx11::sub_match<_BiIter>&)'
 1144 |     operator!=(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1144:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/regex.h:1237:5: note: candidate: 'template<class _Bi_iter, class _Ch_traits, class _Ch_alloc> bool std::__cxx11::operator!=(const std::__cxx11::sub_match<_BiIter>&, std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>&)'
 1237 |     operator!=(const sub_match<_Bi_iter>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1237:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/regex.h:1311:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator!=(const typename std::iterator_traits<_Iter>::value_type*, const std::__cxx11::sub_match<_BiIter>&)'
 1311 |     operator!=(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1311:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   mismatched types 'const std::__cxx11::sub_match<_BiIter>' and 'int'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/regex.h:1405:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator!=(const std::__cxx11::sub_match<_BiIter>&, const typename std::iterator_traits<_Iter>::value_type*)'
 1405 |     operator!=(const sub_match<_Bi_iter>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1405:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/regex.h:1479:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator!=(const typename std::iterator_traits<_Iter>::value_type&, const std::__cxx11::sub_match<_BiIter>&)'
 1479 |     operator!=(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1479:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   mismatched types 'const std::__cxx11::sub_match<_BiIter>' and 'int'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/regex.h:1579:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator!=(const std::__cxx11::sub_match<_BiIter>&, const typename std::iterator_traits<_Iter>::value_type&)'
 1579 |     operator!=(const sub_match<_Bi_iter>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1579:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/regex.h:2126:5: note: candidate: 'template<class _Bi_iter, class _Alloc> bool std::__cxx11::operator!=(const std::__cxx11::match_results<_BiIter, _Alloc>&, const std::__cxx11::match_results<_BiIter, _Alloc>&)'
 2126 |     operator!=(const match_results<_Bi_iter, _Alloc>& __m1,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:2126:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::__cxx11::match_results<_BiIter, _Alloc>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/iosfwd:40,
                 from /usr/include/c++/10/ios:38,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/postypes.h:227:5: note: candidate: 'template<class _StateT> bool std::operator!=(const std::fpos<_StateT>&, const std::fpos<_StateT>&)'
  227 |     operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
      |     ^~~~~~~~
/usr/include/c++/10/bits/postypes.h:227:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::fpos<_StateT>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:64,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/stl_pair.h:496:5: note: candidate: 'template<class _T1, class _T2> constexpr bool std::operator!=(const std::pair<_T1, _T2>&, const std::pair<_T1, _T2>&)'
  496 |     operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
      |     ^~~~~~~~
/usr/include/c++/10/bits/stl_pair.h:496:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::pair<_T1, _T2>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:67,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/stl_iterator.h:372:5: note: candidate: 'template<class _Iterator> bool std::operator!=(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)'
  372 |     operator!=(const reverse_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/10/bits/stl_iterator.h:372:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::reverse_iterator<_Iterator>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:67,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/stl_iterator.h:410:5: note: candidate: 'template<class _IteratorL, class _IteratorR> bool std::operator!=(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&)'
  410 |     operator!=(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/10/bits/stl_iterator.h:410:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::reverse_iterator<_Iterator>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:67,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/stl_iterator.h:1444:5: note: candidate: 'template<class _IteratorL, class _IteratorR> bool std::operator!=(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorR>&)'
 1444 |     operator!=(const move_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/10/bits/stl_iterator.h:1444:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::move_iterator<_IteratorL>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:67,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/stl_iterator.h:1501:5: note: candidate: 'template<class _Iterator> bool std::operator!=(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorL>&)'
 1501 |     operator!=(const move_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/10/bits/stl_iterator.h:1501:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::move_iterator<_IteratorL>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/string:41,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/allocator.h:213:5: note: candidate: 'template<class _T1, class _T2> bool std::operator!=(const std::allocator<_CharT>&, const std::allocator<_T2>&)'
  213 |     operator!=(const allocator<_T1>&, const allocator<_T2>&)
      |     ^~~~~~~~
/usr/include/c++/10/bits/allocator.h:213:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::allocator<_CharT>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/basic_string.h:6229:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator!=(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)'
 6229 |     operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/basic_string.h:6229:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   'secv' is not derived from 'const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/basic_string.h:6242:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator!=(const _CharT*, const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)'
 6242 |     operator!=(const _CharT* __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/basic_string.h:6242:5: note:   template argument deduction/substitution failed:
sumzero.cpp:154:58: note:   mismatched types 'const _CharT*' and 'secv'
  154 |             if (r+pas<=cnt && jumpto(firstseq[a],r+pas)!=0 && jumpto(firstseq[a],r+pas).r<=b)
      |                                                          ^
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from sumzero.cpp:5:
/usr/include/c++/10/bits/basic_string.h:6254:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator!=(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _CharT*)'
 6254 |     operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/basic_st