QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#385939 | #7448. rfplca | Kevin5307 | TL | 0ms | 0kb | C++23 | 2.0kb | 2024-04-11 10:24:01 | 2024-04-11 10:24:01 |
answer
//Author: Kevin
#include<bits/stdc++.h>
//#pragma GCC optimize("O2")
using namespace std;
#define ll long long
#define ull unsigned ll
#define pb emplace_back
#define mp make_pair
#define ALL(x) (x).begin(),(x).end()
#define rALL(x) (x).rbegin(),(x).rend()
#define srt(x) sort(ALL(x))
#define rev(x) reverse(ALL(x))
#define rsrt(x) sort(rALL(x))
#define sz(x) (int)(x.size())
#define inf 0x3f3f3f3f
#define pii pair<int,int>
#define lb(v,x) (int)(lower_bound(ALL(v),x)-v.begin())
#define ub(v,x) (int)(upper_bound(ALL(v),x)-v.begin())
#define uni(v) v.resize(unique(ALL(v))-v.begin())
#define longer __int128_t
void die(string S){puts(S.c_str());exit(0);}
ll bit[400400];
int n,q;
const int B=630;
void update(int p,ll v)
{
while(p<400400)
{
bit[p]+=v;
p+=(p&(-p));
}
}
ll query(int p)
{
ll ans=0;
while(p)
{
ans+=bit[p];
p-=(p&(-p));
}
return max(1ll,ans);
}
int lst[400400];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>q;
for(int i=2;i<=n;i++)
{
int f;
cin>>f;
update(i,f);
update(i+1,-f);
}
set<int> st;
for(int i=2;i<=n;i++)
{
int f=query(i);
if(f/B!=i/B)
lst[i]=f;
else
{
lst[i]=lst[f];
st.insert(i);
}
}
int lastans=0;
while(q--)
{
int t;
cin>>t;
if(t==1)
{
int l,r,x;
cin>>l>>r>>x;
l^=lastans;
r^=lastans;
x^=lastans;
update(l,-x);
update(r+1,x);
auto it=st.lower_bound(l);
while(it!=st.end()&&*it<=r)
{
auto nxt=next(it);
int u=*it;
int f=query(u);
if(f/B!=u/B)
{
lst[u]=f;
st.erase(it);
}
else
lst[u]=lst[f];
it=nxt;
}
}
else
{
int u,v;
cin>>u>>v;
u^=lastans;
v^=lastans;
while(u/B!=v/B)
{
if(u<v) swap(u,v);
u=lst[u];
}
while(lst[u]!=lst[v])
{
u=lst[u];
v=lst[v];
}
while(u!=v)
{
if(u<v) swap(u,v);
u=query(u);
}
cout<<(lastans=u)<<'\n';
}
}
return 0;
}
详细
Test #1:
score: 0
Time Limit Exceeded
input:
400000 400000 1 2 1 4 1 1 5 4 6 5 9 1 1 13 3 8 12 16 3 11 8 8 2 18 21 15 7 23 11 6 4 26 17 5 12 6 5 28 32 26 21 5 19 1 25 25 11 26 47 11 31 25 18 7 25 36 40 23 54 31 14 62 61 33 57 40 11 16 24 51 69 25 55 51 55 65 34 19 18 21 20 62 64 83 22 48 67 47 21 27 30 63 10 14 70 63 18 17 74 98 40 89 10 7 30 ...