제출 #636413

#제출 시각아이디문제언어결과실행 시간메모리
636413deme_bzAddk (eJOI21_addk)C++14
100 / 100
312 ms5212 KiB
/**
 *    author:  demetre_bzekalava
**/

#pragma GCC diagnostic warning "-std=c++11"
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define ff first
#define ss second
#define eb emplace_back
#define sz(x) (int)x.size()
using namespace std;
const int N=2e5+1;
int n,k,q;
ll tree[N][2],a[N];
 
void upd(ll val, int pos, int k){
    while(pos < N){
        tree[pos][k] += val;
        pos += (pos & -pos);
    }
}
 
ll get(int pos, int k){
    ll res = 0;
    while(pos > 0){
        res += tree[pos][k];
        pos -= (pos & -pos);
    }
 
    return res;
}
 
ll range_query(int l, int r, int k){
    return get(r, k) - get(l-1, k);
}

void test_case(){
	cin >> n >> k;
	for(int i=1;i<=n;i++){
		cin >> a[i];
		upd(a[i],i,0);
		upd((ll)(a[i]*i),i,1);
	}
	cin >> q;
	while(q--){
		int t;
		cin >> t;
		if(t==1){
			int ind[k];
			for(int i=0;i<k;i++){
				cin >> ind[i];
			}
			
			int f=a[ind[0]];
			for(int i=0;i<k;i++){
				int c=ind[i];
				int b=ind[(i+1)%k];
				ll valc=a[c];
				ll valb=a[b];
				if(i<k-1){
					a[c]=a[b];
				}
				else{
					valb=f;
					a[c]=f;
				}
				upd(valb-valc,c,0);
				upd((valb-valc)*c,c,1);
			}
		}
		else{
			int l,r,m;
			cin >> l >> r >> m;
            int mid=(l+r)/2;
            int l1=0;
            int r1=0;
            if((r-l+1)<m*2-1){
                m=(r-l+1)-m+1;
            }
            l1=l+m-1;
            r1=r-m+1;
            ll res1=range_query(l, l1-1, 1)-(l-1)*range_query(l, l1-1, 0);
            ll res2=range_query(l1, r1, 0)*m;
            ll res3=range_query(r1+1, r, 1)-(r1)*range_query(r1+1, r, 0);
            res3=(r-r1+1)*range_query(r1+1, r, 0)-res3;
            cout << res1+res2+res3 << endl;
		}
	}
}

int main(){

    int T = 1;
    //cin >> T;
    while(T--){
        test_case();
    }
}

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp:5:32: warning: '-std=c++11' is not an option that controls warnings [-Wpragmas]
    5 | #pragma GCC diagnostic warning "-std=c++11"
      |                                ^~~~~~~~~~~~
Main.cpp: In function 'void test_case()':
Main.cpp:77:17: warning: unused variable 'mid' [-Wunused-variable]
   77 |             int mid=(l+r)/2;
      |                 ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...