Compare commits

..

No commits in common. "3e421f198cd636e5dc31ac82723f01c15836b899" and "34c1b544672da0e1a36b6a0c30877cc1c6f06bdf" have entirely different histories.

3 changed files with 15 additions and 108 deletions

View File

@ -4,7 +4,7 @@
using ll = int64_t; using ll = int64_t;
ll n,q; ll n;
std::vector<ll> t; std::vector<ll> t;
std::vector<ll> v; std::vector<ll> v;
std::vector<ll> lazy; std::vector<ll> lazy;
@ -20,6 +20,7 @@ ll create(ll cur,ll l,ll r){
return t[cur]; return t[cur];
} }
ll rangeadd(ll cur, ll l, ll r, ll ql, ll qr, ll val) { ll rangeadd(ll cur, ll l, ll r, ll ql, ll qr, ll val) {
if (lazy[cur] != 0) { if (lazy[cur] != 0) {
t[cur] += lazy[cur] * (r - l + 1); t[cur] += lazy[cur] * (r - l + 1);
@ -60,7 +61,7 @@ ll rangequery(ll cur, ll l, ll r, ll ql, ll qr) {
} }
int main(){ int main(){
std::cin>>n>>q; std::cin>>n;
t.resize((n+1)*4); t.resize((n+1)*4);
v.resize(n+1); v.resize(n+1);
lazy.resize((n+1)*4); lazy.resize((n+1)*4);
@ -68,17 +69,18 @@ int main(){
std::cin>>v[i]; std::cin>>v[i];
} }
create(1, 1, n); create(1, 1, n);
ll q;
std::cin>>q;
while(q--){ while(q--){
ll op; ll l, r, val;
std::cin>>op; std::cin>>l>>r>>val;
if(op==1){ rangeadd(1, 1, n, l, r, val);
ll x,y,z; std::cout << t[1] << "\n";
std::cin>>x>>y>>z; }
rangeadd(1, 1, n, x, y, z); std::cin>>q;
}else{ while(q--){
ll x,y; ll l, r;
std::cin>>x>>y; std::cin>>l>>r;
std::cout<<rangequery(1, 1, n, x, y)<<'\n'; std::cout << rangequery(1, 1, n, l, r) << "\n";
}
} }
} }

View File

@ -1,44 +0,0 @@
#include <algorithm>
#include <cstdint>
#include <iostream>
#include <istream>
#include <vector>
using ll = int64_t;
std::vector<ll> lg2,nums;
std::vector<std::vector<ll>> st;
int main(){
std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr);
ll n;
std::cin>>n;
ll q;
std::cin>>q;
nums.resize(n+1);
lg2.resize(1e5+5);
for(ll i=2;i<1e5+5;i++){
lg2[i]=lg2[i>>1]+1;
}
st.resize(n+1,std::vector<ll>(lg2[n]+2));
for(ll i=1;i<=n;i++){
std::cin>>nums[i];
st[i][0]=nums[i];
}
for(ll j=1;j<lg2[n]+2;j++){
for(ll i=1;i<=n && i+(1ll<<j)-1<=n;i++){
st[i][j]=std::max(st[i][j-1],st[i+(1ll<<(j-1))][j-1]);
}
}
while(q--){
ll l,r;
std::cin>>l>>r;
ll range = r-l+1;
ll k=lg2[range];
std::cout<<
std::max(st[l][k],st[r-(1ll<<k)+1][k])
<<"\n";
}
}

View File

@ -1,51 +0,0 @@
#include <cstdint>
#include <iostream>
#include <vector>
using ll = int64_t;
const ll M = 1e9+7;
struct M22{
std::vector<std::vector<ll>> v{2,std::vector<ll>(2)};
M22 operator*(const M22&o){
M22 n;
n.v[0][0]=(v[0][0]*o.v[0][0]%M+v[0][1]*o.v[1][0]%M)%M;
n.v[0][1]=(v[0][0]*o.v[0][1]%M+v[0][1]*o.v[1][1]%M)%M;
n.v[1][0]=(v[1][0]*o.v[0][0]%M+v[1][1]*o.v[1][0]%M)%M;
n.v[1][1]=(v[1][0]*o.v[0][1]%M+v[1][1]*o.v[1][1]%M)%M;
return n;
}
M22&operator*=(const M22&o){
*this= *this * o;
return *this;
}
};
M22 fpow(M22 b,ll e){
M22 res;
res.v[0][0]=res.v[1][1]=1;
while(e){
if(e&1){
res*=b;
}
b*=b;
e>>=1;
}
return res;
}
int main(){
ll n;
std::cin>>n;
if(n<=2){
std::cout<<1<<'\n';
return 0;
}
n-=2;
M22 m{{{1,1},{1,0}}};
m=fpow(m, n);
std::cout<<
(m.v[0][0]+m.v[0][1])%M
<<'\n';
}