답안 #1037181

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1037181 2024-07-28T10:04:23 Z modwwe 가로등 (APIO19_street_lamps) C++17
40 / 100
4579 ms 524288 KB
//https://www.instagram.com/_modwwe/
#pragma GCC optimize("Ofast,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2")
#include<bits/stdc++.h>
//#define int long long
//#define ll long long
#define down cout<<'\n';
#define debug cout<<" cucuucucuuu",down
#define NHP     ios_base::sync_with_stdio(0);cout.tie(0);cin.tie(0);
#define modwwe  int t;cin>>t; while(t--)
#define bit(i,j) (i>>j&1)
#define sobit(a) __builtin_popcountll(a)
#define task "test"
#define fin(x) freopen(x".inp","r",stdin)
#define fou(x) freopen(x".ans","w",stdout)
#define pb push_back
#define checktime   cerr << (double)clock() / CLOCKS_PER_SEC * 1000  << " ms";
using namespace std;
void phongbeo();
const int inf=1e9;
const int mod2=1e9+7;
const int  mod1=998244353;
struct icd
{
    int a,b,c,d,e,f;
};
struct ib
{
    int a;
    int b;
};
struct ic
{
    int a,b,c;
};
struct id
{
    int a,b,c,d;
};
struct ie
{
    int a,b,c,d,e;

};

int n,m,s1,s2,s4,s3,sf,k,r,mid,s5,s6,mx,s7,s8,s9,mx2,res,dem2=0,dem=0,l,s33;
int  i,s10,s12;
int kk;
int el=29;
main()
{
#ifndef ONLINE_JUDGE
//     fin(task),fou(task);
#endif
    NHP
    /// cin>>s1;
    //  modwwe
    phongbeo();
}
string s;
int t[1200001];
void build(int node,int l,int r)
{
     if(l==r) { t[node]=s[l-1]-'0'; return; };
      int mid=l+r>>1;
    build(node<<1,l,mid);
    build(node<<1|1,mid+1,r);
     t[node]=t[node<<1]*t[node<<1|1];
}
void upd(int node,int l,int r,int l1)
{
     if(l==r) { t[node]=1-t[node]; return;}
      int mid=l+r>>1;
 if(l1<=mid) upd(node<<1,l,mid,l1);
  else upd(node<<1|1,mid+1,r,l1);
   t[node]=t[node<<1]*t[node<<1|1];
}
int get(int node,int l,int r,int l1,int r1)
   {
        if(l>r1||r<l1) return 1;
        if(l>=l1&&r<=r1) return t[node];
         int mid=l+r>>1;
          return get(node<<1,l,mid,l1,r1)*get(node<<1|1,mid+1,r,l1,r1);
   }
int bsl(int x)
 {
      int l=1;
      int r=x-1;
       while(l<=r)
       {
            int mid=l+r>>1;
              if(get(1,1,n,mid,x-1)==1) r=mid-1;
               else l=mid+1;
       }
       return r+1;
 }
 int bsr(int x)
  {
      int l=x+1;
        int r=n;
         while(l<=r)
         {
              int mid=l+r>>1;
               if(get(1,1,n,x+1,mid)==1) l=mid+1;
                else r=mid-1;
         }
          return l-1;
  }
  struct BIT2D{
      ///https://hackmd.io/@socpite/rkM_5OWIn
      vector<int>bit[300002];
      vector<int> bit2[300002];
   void fake_up(int x,int y,int z)
    {
       for(x;x<=n;x+=x&-x)
                for(int y2=y;y2<=n;y2+=y2&-y2)
                bit[x].pb(y2);
    }

       void fake_get(int x,int y)
         { int ss=0;
              for(x;x;x-=x&-x)
                for(int y2=y;y2;y2-=y2&-y2)
                  bit[x].pb(y2);
         }
         void fake_upd(int x, int y, int u, int v, int val) {
    fake_up(x, y, val);
    fake_up(x, v + 1, -val);
    fake_up(u + 1, y, -val);
    fake_up(u + 1, v + 1, val);
}
void setup()
{
     for(int i=1;i<=n;i++){
 if(bit[i].size()!=0){
            bit[i].push_back(0);
      sort(bit[i].begin(),bit[i].end());
        bit[i].erase(unique(bit[i].begin(), bit[i].end()), bit[i].end());
 bit2[i].assign(bit[i].size(),0);}
     }

}
void up(int x,int y,int z)
    {
       for(x;x<=n;x+=x&-x)
                for(int y2=lower_bound(bit[x].begin(),bit[x].end(),y)-bit[x].begin();y2<bit[x].size();y2+=y2&-y2){
                /// cout<<y2<<"\n";
                bit2[x][y2]+=z;}
    }

       int get(int x,int y)
         { int ss=0;
              for(x;x;x-=x&-x)
                for(int y2=lower_bound(bit[x].begin(),bit[x].end(),y)-bit[x].begin();y2;y2-=y2&-y2)
                  ss+=bit2[x][y2];
                  return ss;
         }
         void upd(int x, int y, int u, int v, int val) {
    up(x, y, val);
    up(x, v + 1, -val);
    up(u + 1, y, -val);
    up(u + 1, v + 1, val);
}
}cd;
vector<icd>v;
void phongbeo()
 {
     cin>>n>>m;
      cin>>s;
       build(1,1,n);
  for(int i=1;i<=m;i++)
  {
       string ss2;
       cin>>ss2;
        if(ss2[0]=='t'){cin>>l;
         s2=bsl(l);
          s3=bsr(l);
        if(s[l-1]=='1')s[l-1]='0';else s[l-1]='1';
             if(s[l-1]=='0')
            cd.fake_upd(s2,l,l,s3,i),v.pb({s2,l,l,s3,i,0});
            else cd.fake_upd(s2,l,l,s3,-i),v.pb({s2,l,l,s3,-i,0});
           upd(1,1,n,l);
        }
        else
        {
            cin>>l>>r;
            r--;
            cd.fake_get(l,r);
             if(get(1,1,n,l,r)==1)v.pb({l,r,i,0,0,1});
             else  v.pb({l,r,0,0,0,1});
              down
        }
       }
     cd.setup();
      for(auto x:v)
        {
             if(x.f==0)
             {
                 cd.upd(x.a,x.b,x.c,x.d,x.e);
             }
             else
             {
                cout<<cd.get(x.a,x.b)+x.c,down
             }
        }
 }

Compilation message

street_lamps.cpp:50:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   50 | main()
      | ^~~~
street_lamps.cpp: In function 'void build(int, int, int)':
street_lamps.cpp:65:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   65 |       int mid=l+r>>1;
      |               ~^~
street_lamps.cpp: In function 'void upd(int, int, int, int)':
street_lamps.cpp:73:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   73 |       int mid=l+r>>1;
      |               ~^~
street_lamps.cpp: In function 'int get(int, int, int, int, int)':
street_lamps.cpp:82:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   82 |          int mid=l+r>>1;
      |                  ~^~
street_lamps.cpp: In function 'int bsl(int)':
street_lamps.cpp:91:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   91 |             int mid=l+r>>1;
      |                     ~^~
street_lamps.cpp: In function 'int bsr(int)':
street_lamps.cpp:103:24: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  103 |               int mid=l+r>>1;
      |                       ~^~
street_lamps.cpp: In member function 'void BIT2D::fake_up(int, int, int)':
street_lamps.cpp:115:12: warning: statement has no effect [-Wunused-value]
  115 |        for(x;x<=n;x+=x&-x)
      |            ^
street_lamps.cpp: In member function 'void BIT2D::fake_get(int, int)':
street_lamps.cpp:122:19: warning: statement has no effect [-Wunused-value]
  122 |               for(x;x;x-=x&-x)
      |                   ^
street_lamps.cpp:121:16: warning: unused variable 'ss' [-Wunused-variable]
  121 |          { int ss=0;
      |                ^~
street_lamps.cpp: In member function 'void BIT2D::up(int, int, int)':
street_lamps.cpp:145:12: warning: statement has no effect [-Wunused-value]
  145 |        for(x;x<=n;x+=x&-x)
      |            ^
street_lamps.cpp:146:88: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  146 |                 for(int y2=lower_bound(bit[x].begin(),bit[x].end(),y)-bit[x].begin();y2<bit[x].size();y2+=y2&-y2){
      |                                                                                      ~~^~~~~~~~~~~~~~
street_lamps.cpp: In member function 'int BIT2D::get(int, int)':
street_lamps.cpp:153:19: warning: statement has no effect [-Wunused-value]
  153 |               for(x;x;x-=x&-x)
      |                   ^
street_lamps.cpp:154:17: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
  154 |                 for(int y2=lower_bound(bit[x].begin(),bit[x].end(),y)-bit[x].begin();y2;y2-=y2&-y2)
      |                 ^~~
street_lamps.cpp:156:19: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
  156 |                   return ss;
      |                   ^~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 14936 KB Output is correct
2 Correct 4 ms 14940 KB Output is correct
3 Correct 3 ms 14940 KB Output is correct
4 Correct 4 ms 14940 KB Output is correct
5 Correct 4 ms 14940 KB Output is correct
6 Correct 4 ms 15004 KB Output is correct
7 Correct 3 ms 14940 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 391 ms 75704 KB Output is correct
2 Correct 653 ms 104112 KB Output is correct
3 Correct 1528 ms 204196 KB Output is correct
4 Correct 4058 ms 415892 KB Output is correct
5 Correct 3709 ms 383876 KB Output is correct
6 Correct 4579 ms 455564 KB Output is correct
7 Correct 1434 ms 189208 KB Output is correct
8 Correct 1526 ms 191124 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 15684 KB Output is correct
2 Correct 9 ms 15452 KB Output is correct
3 Correct 7 ms 15432 KB Output is correct
4 Correct 6 ms 15196 KB Output is correct
5 Runtime error 2100 ms 524288 KB Execution killed with signal 9
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 15196 KB Output is correct
2 Correct 7 ms 15196 KB Output is correct
3 Correct 11 ms 15412 KB Output is correct
4 Correct 10 ms 15456 KB Output is correct
5 Correct 1728 ms 217216 KB Output is correct
6 Correct 3123 ms 354508 KB Output is correct
7 Correct 4540 ms 478868 KB Output is correct
8 Runtime error 1763 ms 524288 KB Execution killed with signal 9
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 14936 KB Output is correct
2 Correct 4 ms 14940 KB Output is correct
3 Correct 3 ms 14940 KB Output is correct
4 Correct 4 ms 14940 KB Output is correct
5 Correct 4 ms 14940 KB Output is correct
6 Correct 4 ms 15004 KB Output is correct
7 Correct 3 ms 14940 KB Output is correct
8 Correct 391 ms 75704 KB Output is correct
9 Correct 653 ms 104112 KB Output is correct
10 Correct 1528 ms 204196 KB Output is correct
11 Correct 4058 ms 415892 KB Output is correct
12 Correct 3709 ms 383876 KB Output is correct
13 Correct 4579 ms 455564 KB Output is correct
14 Correct 1434 ms 189208 KB Output is correct
15 Correct 1526 ms 191124 KB Output is correct
16 Correct 9 ms 15684 KB Output is correct
17 Correct 9 ms 15452 KB Output is correct
18 Correct 7 ms 15432 KB Output is correct
19 Correct 6 ms 15196 KB Output is correct
20 Runtime error 2100 ms 524288 KB Execution killed with signal 9
21 Halted 0 ms 0 KB -