bingxuan9112

7-11便利序列(STL應用)

Nov 27th, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.56 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 2001;
  4.  
  5. string com;
  6. int n,q,v[N];
  7. signed main() {
  8.     ios_base::sync_with_stdio(0), cin.tie(0);
  9.     cin >> n;
  10.     for(int i = 0; i < n; i++) cin >> v[i];
  11.     cin >> q;
  12.     while(q--) {
  13.         int a,b,c;
  14.         cin >> com;
  15.         if(com == "SWAP") {
  16.             cin >> a >> b, --a, --b;
  17.             swap(v[a],v[b]);
  18.         }else if(com == "MOD") {
  19.             cin >> a >> b >> c, --a;
  20.             fill(v+a,v+b,c);
  21.         }else if(com == "ENUM") {
  22.             cin >> a >> b >> c, --a;
  23.             iota(v+a,v+b,c);
  24.         }else if(com == "SORT") {
  25.             cin >> a >> b, --a;
  26.             sort(v+a,v+b);
  27.         }else if(com == "TROS") {
  28.             cin >> a >> b, --a;
  29.             sort(v+a,v+b,greater<int>());
  30.         }else if(com == "REV") {
  31.             cin >> a >> b, --a;
  32.             reverse(v+a,v+b);
  33.         }else if(com == "DIV10") {
  34.             cin >> a >> b, --a;
  35.             stable_sort(v+a,v+b,[](int x,int y){return x%10 < y%10;});
  36.         }else if(com == "ROT") {
  37.             cin >> a >> c >> b, --a;
  38.             rotate(v+a,v+c,v+b);
  39.         }else if(com == "INC") {
  40.             cin >> a >> b, --a;
  41.             next_permutation(v+a,v+b);
  42.         }else if(com == "DEC") {
  43.             cin >> a >> b, --a;
  44.             prev_permutation(v+a,v+b);
  45.         }else if(com == "COMP") {
  46.             cin >> a >> b, --a;
  47.             vector<int> u(v+a,v+b);
  48.             sort(u.begin(),u.end());
  49.             for(int i = a; i < b; i++) v[i] = lower_bound(u.begin(),u.end(),v[i])-u.begin()+1;
  50.         }else if(com == "MIN") {
  51.             cin >> a >> b, --a;
  52.             cout << *min_element(v+a,v+b) << '\n';
  53.         }else if(com == "MAX") {
  54.             cin >> a >> b, --a;
  55.             cout << *max_element(v+a,v+b) << '\n';
  56.         }else if(com == "SUM") {
  57.             cin >> a >> b, --a;
  58.             cout << accumulate(v+a,v+b,0LL) << '\n';
  59.         }else if(com == "PROD") {
  60.             cin >> a >> b, --a;
  61.             cout << accumulate(v+a,v+b,1LL,[](long long a,long long b){return abs(a)*abs(b)%998244353;}) << '\n';
  62.         }else if(com == "GCD") {
  63.             cin >> a >> b, --a;
  64.             cout << accumulate(v+a,v+b,0,__gcd<int>) << '\n';
  65.         }else if(com == "CNT") {
  66.             cin >> a >> b >> c, --a;
  67.             cout << count(v+a,v+b,c) << '\n';
  68.         }else if(com == "NTH") {
  69.             cin >> a >> b >> c, --a,--c;
  70.             vector<int> u(v+a,v+b);
  71.             nth_element(u.begin(),u.begin()+c,u.end());
  72.             cout << u.at(c) << '\n';
  73.         }
  74.     }
  75. }
Add Comment
Please, Sign In to add comment