mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-12-21 14:41:45 +00:00
Compare commits
4 Commits
34c1b54467
...
3e421f198c
| Author | SHA1 | Date | |
|---|---|---|---|
| 3e421f198c | |||
| 321c58cc95 | |||
| 48ef07ec43 | |||
| 244f30692c |
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
using ll = int64_t;
|
using ll = int64_t;
|
||||||
|
|
||||||
ll n;
|
ll n,q;
|
||||||
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,7 +20,6 @@ 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);
|
||||||
@ -61,7 +60,7 @@ ll rangequery(ll cur, ll l, ll r, ll ql, ll qr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
std::cin>>n;
|
std::cin>>n>>q;
|
||||||
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);
|
||||||
@ -69,18 +68,17 @@ 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 l, r, val;
|
ll op;
|
||||||
std::cin>>l>>r>>val;
|
std::cin>>op;
|
||||||
rangeadd(1, 1, n, l, r, val);
|
if(op==1){
|
||||||
std::cout << t[1] << "\n";
|
ll x,y,z;
|
||||||
}
|
std::cin>>x>>y>>z;
|
||||||
std::cin>>q;
|
rangeadd(1, 1, n, x, y, z);
|
||||||
while(q--){
|
}else{
|
||||||
ll l, r;
|
ll x,y;
|
||||||
std::cin>>l>>r;
|
std::cin>>x>>y;
|
||||||
std::cout << rangequery(1, 1, n, l, r) << "\n";
|
std::cout<<rangequery(1, 1, n, x, y)<<'\n';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
44
src/8/18/sparsetable.cpp
Normal file
44
src/8/18/sparsetable.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#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";
|
||||||
|
}
|
||||||
|
}
|
||||||
51
src/8/19/P1962.cpp
Normal file
51
src/8/19/P1962.cpp
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
#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';
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user