QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#875203 | #9791. Intrusive Donkey | ucup-team3646# | WA | 1ms | 3712kb | C++20 | 4.4kb | 2025-01-29 12:51:43 | 2025-01-29 12:51:44 |
Judging History
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,idxr);
seg.set(idxl,len+(r-l+1));
}
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,2*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";
}
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
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: 0ms
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: 0ms
memory: 3584kb
input:
5 4 shrek 1 1 2 2 7 1 1 7 2 7
output:
k h
result:
ok 2 lines
Test #5:
score: -100
Wrong Answer
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:
e
result:
wrong answer 1st lines differ - expected: 'f', found: 'e'