QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#875210#9791. Intrusive Donkeyucup-team3646#WA 1ms3712kbC++204.4kb2025-01-29 12:57:422025-01-29 12:57:42

Judging History

你现在查看的是最新测评结果

  • [2025-01-29 12:57:42]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3712kb
  • [2025-01-29 12:57:42]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;

using ll = long long;
#define rep(i, n) for(ll i = 0; i < (n); ++i)
#define rep2(i, l, r) for(ll i = (l); i < (r); ++i)

using vi = vector<int>;
using vvi = vector<vi>;
using vll = vector<ll>;

#define all(A) A.begin(), A.end()
#define elif else if
using pii = pair<ll, ll>;

bool chmin(auto &a, auto b) {return a > b ? a = b, 1 : 0;}
bool chmax(auto &a, auto b) {return a < b ? a = b, 1 : 0;}

struct IOS {
  IOS() {
    cin.tie(0);
    ios::sync_with_stdio(0);
  }
} iosetup;

template<class T>
void print(vector<T> a) {
  for(auto x : a) cout << x << ' ';
  cout << endl;
}

void print(auto x) {cout << x << endl;}

template<class Head, class... Tail>
void print(Head &&head, Tail &&...tail) {
  cout << head << ' ';
  print(forward<Tail>(tail)...);
}

template<class S, S(*op)(S, S), S(*e)(), class F, S(*mp)(F, S), F(*cmp)(F, F), F(*id)()>
struct lazysegtree {
  int N, sz, log;
  vector<S> d;
  vector<F> lz;

  lazysegtree() = default;
  lazysegtree(int n) : lazysegtree(vector<S>(n, e())) {};
  lazysegtree(vector<S> v) {
    N = v.size();
    sz = 1, log = 0;
    while(sz < N) sz *= 2, log++;
    d.assign(2*sz, e());
    lz.assign(2*sz, id());
    rep(i, N) d[i+sz] = v[i];
    for(int i = sz-1; i > 0; --i) d[i] = op(d[2*i], d[2*i+1]);
  }

  void update(int k) {d[k] = op(d[2*k], d[2*k+1]);}
  void all_apply(int k, F f) {
    d[k] = mp(f, d[k]);
    if(k < sz) lz[k] = cmp(f, lz[k]);
  }
  void push(int k) {
    all_apply(2*k, lz[k]);
    all_apply(2*k+1, lz[k]);
    lz[k] = id();
  }
  void PUSH(int k) {
    for(int i = log; i > 0; --i) push(k >> i);
  }

  bool shift(int x, int i) {return ((x>>i)<<i)!= x;}

  S prod(int l, int r) {
    if(l == r) return e();
    l += sz, r += sz;
    for(int i = log; i > 0; i--) {
      if(shift(l, i)) push(l>>i);
      if(shift(r, i)) push((r-1)>>i);
    }
    S sml = e(), smr = e();
    while(l < r) {
      if(l&1) sml = op(sml, d[l++]);
      if(r&1) smr = op(d[--r], smr);
      l >>= 1, r >>= 1;
    }
    return op(sml, smr);
  }

  void apply(int l, int r, F f) {
    if(l==r) return;
    l += sz, r += sz;
    for(int i = log; i > 0; --i) {
      if(shift(l, i)) push(l>>i);
      if(shift(r, i)) push((r-1)>>i);
    }
    int ml = l, mr = r;
    while(l < r) {
      if(l&1) all_apply(l++, f);
      if(r&1) all_apply(--r, f);
      l >>= 1, r >>= 1;
    }
    l = ml, r = mr;
    rep2(i, 1, log+1) {
      if(shift(l, i)) update(l >> i);
      if(shift(r, i)) update((r-1)>>i);
    }
  }

  void set(int p, S x) {
    p += sz;
    PUSH(p);
    d[p] = x;
    rep2(i, 1, log+1) update(p >> i);
  }

  template<class C>
  int max_right(int l, C check) {
    assert(check(e()));
    if(l == N) return N;
    l += sz;
    PUSH(l);
    S sm = e();
    do {
      while(~l & 1) l >>= 1;
      if(!check(op(sm, d[l]))) {
        while(l < sz) {
          push(l);
          l <<= 1;
          if(check(op(sm, d[l]))) {
            sm = op(sm, d[l]);
            l++;
          }
        }
        return l - sz;
      }
      sm = op(sm, d[l]);
      l++;
    } while((l & -l) != l);
    return N;
  }

};


ll op(ll a,ll b){return a+b;}
ll e(){return 0;}
ll mapping(ll f,ll x){return f*x;}
ll cmp(ll f,ll g){return f*g;}
ll id(){return 1;}

ll target;
bool f(ll x){return x<=target;}

int main(){
  int n,q;
  cin>>n>>q;
  string s;
  cin>>s;
  vll init(n,1);
  lazysegtree<ll,op,e,ll,mapping,cmp,id>seg(init);

  auto get=[&](ll x)->int{
    target=x;
    return seg.max_right(0,f);
  };

  rep(i,q){
    int t;
    cin>>t;
    if(t==1){
      ll l,r;
      cin>>l>>r;
      l--;
      // r--;
      int idxl=get(l);
      int idxr=get(r);
      if(idxl==idxr){
        ll len=seg.prod(idxl,idxl+1);
        seg.set(idxl,len+(r-l));
      }
      else{
        int left1=seg.prod(0,idxl);
        ll len1=seg.prod(idxl,idxl+1);

        int left2=seg.prod(0,idxr);
        ll len2=seg.prod(idxr,idxr+1);
        
        {
          seg.set(idxl,2*len1-(l-left1));
        }

        {
          seg.apply(idxl+1,idxr,2);
        }
        {
          seg.set(idxr,len2+(r-left2));
        }
      }
      // rep(i,n)cout<<seg.prod(i,i+1)<<" ";
      // cout<<endl;
    }
    else{
      ll idx;
      cin>>idx;
      idx--;
      cout<<s[get(idx)]<<"\n";
    }
  }
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 3712kb

input:

4 7
abac
2 2
2 3
1 2 3
2 3
2 4
2 5
2 6

output:

b
a
b
a
a
c

result:

ok 6 lines

Test #2:

score: 0
Accepted
time: 1ms
memory: 3584kb

input:

5 4
shrek
1 1 2
2 7
1 1 7
2 7

output:

k
h

result:

ok 2 lines

Test #3:

score: 0
Accepted
time: 1ms
memory: 3712kb

input:

4 7
abac
2 2
2 3
1 2 3
2 3
2 4
2 5
2 6

output:

b
a
b
a
a
c

result:

ok 6 lines

Test #4:

score: 0
Accepted
time: 1ms
memory: 3712kb

input:

5 4
shrek
1 1 2
2 7
1 1 7
2 7

output:

k
h

result:

ok 2 lines

Test #5:

score: 0
Accepted
time: 0ms
memory: 3712kb

input:

3 55
vfe
1 2 3
1 2 2
1 3 5
2 4
1 1 2
2 9
2 7
2 5
1 10 10
1 1 1
2 9
1 8 12
2 8
1 7 10
2 1
1 5 6
1 1 4
1 20 24
1 14 32
1 19 38
2 48
1 56 64
2 58
2 19
1 64 72
1 36 86
2 11
1 117 124
2 38
2 108
2 85
1 112 118
2 153
2 40
2 114
2 80
1 11 18
2 27
2 73
1 159 162
2 84
1 130 164
2 163
2 65
1 150 156
1 101 109...

output:

f
e
f
f
f
f
v
f
e
f
f
f
e
e
e
f
e
e
f
e
e
e
f
e
f
e
v

result:

ok 27 lines

Test #6:

score: 0
Accepted
time: 0ms
memory: 3712kb

input:

60 51
ranhfkbjhkxckkcbhgsspsjcbjgpwcfvmqqlvlfualndmqqsihsfdyqviowu
2 53
2 37
2 33
2 60
1 1 32
2 44
1 87 92
1 7 77
1 56 86
2 17
1 128 184
1 26 159
2 323
2 55
1 24 316
1 435 652
2 316
2 444
1 819 868
2 27
2 912
2 313
1 555 576
1 510 942
1 1118 1269
2 365
2 84
1 595 650
2 1468
2 258
1 1557 1607
2 938
1...

output:

d
v
m
u
s
k
q
c
p
j
j
n
p
j
c
u
s
c
b
p
u
p
c
n
p
g

result:

ok 26 lines

Test #7:

score: -100
Wrong Answer
time: 0ms
memory: 3584kb

input:

32 58
shdnavermvazdgaqioiqictppwhtoplw
1 28 32
2 17
2 12
1 23 28
2 10
1 16 43
1 25 42
2 85
1 21 46
1 42 73
1 114 144
2 42
2 127
2 111
2 42
2 113
2 38
1 164 174
1 104 180
2 134
2 247
1 122 234
2 34
1 324 354
2 265
1 365 383
2 208
2 405
2 409
2 344
2 376
1 344 401
1 258 453
1 73 267
2 791
2 45
2 133
2...

output:

s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s

result:

wrong answer 1st lines differ - expected: 'i', found: 's'