Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define f first
- #define s second
- #define mp make_pair
- #define pb push_back
- #define lp(i,a,n) for(int i=(a);i<=(int)(n);++i)
- #define lpd(i,a,n) for(int i=(a);i>=(int)(n);--i)
- #define mem(a,b) memset(a,b,sizeof a)
- #define all(v) v.begin(),v.end()
- #define println(a) cout <<(a) <<endl
- #define sz(x) ((int)(x).size())
- #define readi(x) scanf("%d",&x)
- #define read2i(x,y) scanf("%d%d",&x,&y)
- #define read3i(x,y,z) scanf("%d%d%d",&x,&y,&z)
- #define readll(x) scanf("%I64d",&x)
- #define mod 1000000007
- #define eps 1e-6
- #define infi 1000000000
- #define infll 1000000000000000000ll
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> pii;
- typedef pair<ll, ll> pll;
- typedef vector<int> vi;
- typedef vector<vi> vvi;
- typedef vector<ll> vll;
- typedef set<int> si;
- typedef map<int,int> mii;
- const int N = 100002;
- int n,q,a[N];
- ll tree[N],prodTreeL[N],prodTreeR[N];
- void update(int i, ll diff, ll tree[]){
- while (i < N){
- tree[i] += diff;
- i += i & -i;
- }
- }
- ll query(int i, ll tree[]){
- ll sum = 0;
- while(i > 0){
- sum += tree[i];
- i -= i & -i;
- }
- return sum;
- }
- int main(){
- read2i(n,q);
- lp(i,1,n){
- readi(a[i]);
- update(i, a[i], tree);
- update(i, 1ll*i*a[i], prodTreeL);
- update(i, 1ll*(n-i+1)*a[i], prodTreeR);
- }
- while(q--){
- int t,l,r,k;
- read3i(t,l,r);
- if(t == 1){
- readi(k);
- ll ans = query(r, prodTreeR) - query(max(l-1,r-k), prodTreeR) - (n-r) * (query(r, tree) - query(max(l-1,r-k), tree));
- if(l <= r-k) ans += (k+1) * (query(max(l-1,r-k), tree) - query(l-1, tree));
- if(l > 1) ans += query(l-1, prodTreeL) - query(l-k-1, prodTreeL) - max(0, l-k-1) * (query(l-1, tree) - query(l-k-1, tree));
- println(ans);
- }
- else{
- update(l, -a[l] + r, tree);
- update(l, -1ll*l*a[l] + 1ll*l*r, prodTreeL);
- update(l, -1ll*(n-l+1)*a[l] + 1ll*(n-l+1)*r, prodTreeR);
- a[l] = r;
- }
- }
- }
- /*
- 6 100
- 1 2 3 4 5 6
- */
- //freopen("input.txt","r",stdin);
- //freopen("output.txt","w",stdout);
- //ios::sync_with_stdio(0);cin.tie(0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement