Submission #956853

# Submission time Handle Problem Language Result Execution time Memory
956853 2024-04-02T14:54:24 Z HoriaHaivas Street Lamps (APIO19_street_lamps) C++14
20 / 100
2549 ms 152300 KB
/*
    "care a facut teste cu Lattice reduction attack e ciudat"
    "linistiti va putin"
    - 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 event
{
    int x;
    int y;
    int moment;
};

int mom,n;
bool state[300001];
bool initialstate[300001];
bool type[300001];
int l[300001];
int r[300001];
int pos[300001];
int altaib[300001];
vector<event> updates;
vector<int> vals[300001];
vector<int> aib[300001];

void altupdate(int index, int delta)
{
    while (index<=n)
    {
        altaib[index]+=delta;
        index+=index&(-index);
    }
}

int altquery(int index)
{
    int ans;
    ans=0;
    while (index>0)
    {
        ans+=altaib[index];
        index-=index&(-index);
    }
    return ans;
}

void setupdate(int x, int y)
{
     for (;x<=n;x+=x&(-x))
     {
          vals[x].push_back(y);
     }
}

void updatinho(int apos)
{
     int st,dr;
     st=apos-1;
     while (st>0 && state[st]==1)
     {
            st--;
     }
     st++;
     dr=apos+1;
     while (dr<n+1 && state[dr]==1)
     {
            dr++;
     }
     dr--;
     setupdate(st,apos);
     updates.push_back({st,apos,mom});
     setupdate(apos+1,apos);
     updates.push_back({apos+1,apos,mom});
     setupdate(st,dr+1);
     updates.push_back({st,dr+1,mom});
     setupdate(apos+1,dr+1);
     updates.push_back({apos+1,dr+1,mom});
}

int indice(int x, int y)
{
    return upper_bound(vals[x].begin(),vals[x].end(),y)-vals[x].begin()-1;
}

void update(int x, int y, int delta)
{
    int newy;
    for (;x<=n;x+=x&(-x))
    {
         newy=indice(x,y);
         for (;newy<=aib[x].size();newy+=newy&(-newy))
         {
              aib[x][newy]+=delta;
         }
    }
}

int query(int x, int y)
{
    int ans,newy;
    ans=0;
    for (;x>0;x-=x&(-x))
    {
        newy=indice(x,y);
        for (;newy>0;newy-=newy&(-newy))
        {
             ans+=aib[x][newy];
        }
    }
    return ans;
}

signed main()
{
    ifstream fin("secvp.in");
    ofstream fout("secvp.out");
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    long long q,i,j,cnt;
    char ch;
    string s;
    cin >> n >> q;
    for (i=1; i<=n; i++)
    {
        cin >> ch;
        if (ch=='0')
            state[i]=0;
        else
            state[i]=1;
        if (state[i]==1)
        altupdate(i,1);
        initialstate[i]=state[i];
    }
    for (i=1; i<=q; i++)
    {
        cin >> s;
        if (s=="query")
            type[i]=1;
        else
            type[i]=0;
        if (type[i]==1)
        {
            cin >> l[i] >> r[i];
        }
        else
        {
            cin >> pos[i];
            mom=i;
            updatinho(pos[i]);
            state[pos[i]]=1-state[pos[i]];
        }
    }
    for (i=1;i<=n;i++)
    {
         vals[i].push_back(0);
         sort(vals[i].begin(),vals[i].end());
         aib[i].resize(vals[i].size());
         state[i]=initialstate[i];
    }
    cnt=0;
    for (i=1;i<=q;i++)
    {
         if (type[i]==1)
         {
             if (query(l[i],r[i]-1)!=0)
             cout << i+query(l[i],r[i]-1) << "\n";
             else
             {
                 if (altquery(r[i]-1)-altquery(l[i]-1)==(r[i]-l[i]))
                    cout << i << "\n";
                 else
                    cout << 0 << "\n";
             }
         }
         else
         {
             if (state[pos[i]]==1)
             {
                 update(updates[cnt].x,updates[cnt].y,updates[cnt].moment);
                 cnt++;
                 update(updates[cnt].x,updates[cnt].y,-updates[cnt].moment);
                 cnt++;
                 update(updates[cnt].x,updates[cnt].y,-updates[cnt].moment);
                 cnt++;
                 update(updates[cnt].x,updates[cnt].y,updates[cnt].moment);
                 cnt++;
                 altupdate(pos[i],-1);
             }
             else
             {
                 update(updates[cnt].x,updates[cnt].y,-updates[cnt].moment);
                 cnt++;
                 update(updates[cnt].x,updates[cnt].y,updates[cnt].moment);
                 cnt++;
                 update(updates[cnt].x,updates[cnt].y,updates[cnt].moment);
                 cnt++;
                 update(updates[cnt].x,updates[cnt].y,-updates[cnt].moment);
                 cnt++;
                 altupdate(pos[i],1);
             }
         }
    }
}

Compilation message

street_lamps.cpp: In function 'void update(int, int, int)':
street_lamps.cpp:97:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   97 |          for (;newy<=aib[x].size();newy+=newy&(-newy))
      |                ~~~~^~~~~~~~~~~~~~~
street_lamps.cpp: In function 'int main()':
street_lamps.cpp:126:19: warning: unused variable 'j' [-Wunused-variable]
  126 |     long long q,i,j,cnt;
      |                   ^
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 19032 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 476 ms 48948 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 8 ms 19288 KB Output is correct
2 Correct 6 ms 19292 KB Output is correct
3 Correct 5 ms 19292 KB Output is correct
4 Correct 4 ms 19036 KB Output is correct
5 Correct 2549 ms 152300 KB Output is correct
6 Correct 1869 ms 125444 KB Output is correct
7 Correct 1159 ms 87764 KB Output is correct
8 Correct 184 ms 46676 KB Output is correct
9 Correct 68 ms 22868 KB Output is correct
10 Correct 73 ms 23336 KB Output is correct
11 Correct 71 ms 23380 KB Output is correct
12 Correct 178 ms 45280 KB Output is correct
13 Correct 200 ms 46628 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 19036 KB Output is correct
2 Incorrect 5 ms 19248 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 19032 KB Output isn't correct
2 Halted 0 ms 0 KB -