当前位置: 首页 > news >正文

电子商务在线网站建设嘉兴 企业网站 哪家

电子商务在线网站建设,嘉兴 企业网站 哪家,中山门户网站建设,聊城网站建设科技公司题意 传送门 AtCoder 265G 012 Inversion 题解 直接维护逆序对数量比较困难&#xff0c;考虑到元素值域很小&#xff0c;直接将不同数值对解耦进行维护。具体而言&#xff0c;线段树维护区间 0 , 1 , 2 0,1,2 0,1,2 的数量&#xff0c;以及满足 i < j i<j i<j 时…
题意

传送门 AtCoder 265G 012 Inversion

题解

直接维护逆序对数量比较困难,考虑到元素值域很小,直接将不同数值对解耦进行维护。具体而言,线段树维护区间 0 , 1 , 2 0,1,2 0,1,2 的数量,以及满足 i < j i<j i<j a [ i ] = x , a [ j ] = 1 a[i]=x,a[j]=1 a[i]=x,a[j]=1 的数对数量 n u m [ x ] [ y ] num[x][y] num[x][y]。总时间复杂度 O ( d 2 n log ⁡ n ) O(d^2n\log n) O(d2nlogn),其中, d d d 是数组取值的规模。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
struct ST {struct LzNode {vector<int> p;LzNode() : p(3) {reset();}void reset() {iota(p.begin(), p.end(), 0);}void update(vector<int> &f) {vector<int> tmp(3);for (int i = 0; i < 3; ++i) {tmp[i] = f[p[i]];}swap(tmp, p);}};struct Node {vector<int> cnt;vector<vector<ll>> num;Node() : cnt(3), num(3, vector<ll>(3)) {}Node operator+(const Node &o) {Node res;for (int i = 0; i < 3; ++i) {res.cnt[i] = cnt[i] + o.cnt[i];}for (int i = 0; i < 3; ++i) {for (int j = 0; j < 3; ++j) {res.num[i][j] = num[i][j] + o.num[i][j];}}for (int i = 0; i < 3; ++i) {for (int j = 0; j < 3; ++j) {res.num[i][j] += (ll)cnt[i] * o.cnt[j];}}return res;}void update(vector<int> &p) {Node res;for (int i = 0; i < 3; ++i) {res.cnt[p[i]] += cnt[i];}for (int i = 0; i < 3; ++i) {for (int j = 0; j < 3; ++j) {res.num[p[i]][p[j]] += num[i][j];}}swap(*this, res);}};vector<Node> dat;vector<LzNode> lz;ST(vector<int> &a) {int n = a.size();int k = 1;while (k < n) {k *= 2;}k *= 2;dat = vector<Node>(k);lz = vector<LzNode>(k);function<void(int, int, int)> init = [&](int p, int l, int r) {if (r - l == 1) {dat[p].cnt[a[l]] += 1;return;}int m = (l + r) / 2;int chl = p * 2 + 1, chr = p * 2 + 2;init(chl, l, m);init(chr, m, r);dat[p] = dat[chl] + dat[chr];};init(0, 0, n);}void pushdown(int p, int l, int r) {int chl = p * 2 + 1, chr = p * 2 + 2;auto &f = lz[p].p;lz[chl].update(f);lz[chr].update(f);dat[chl].update(f);dat[chr].update(f);lz[p].reset();}void change(int a, int b, vector<int> &f, int p, int l, int r) {if (r <= a || b <= l) {return;}if (a <= l && r <= b) {lz[p].update(f);dat[p].update(f);return;}int m = (l + r) / 2;int chl = p * 2 + 1, chr = p * 2 + 2;pushdown(p, l, r);change(a, b, f, chl, l, m);change(a, b, f, chr, m, r);dat[p] = dat[chl] + dat[chr];}Node query(int a, int b, int p, int l, int r) {if (r <= a || b <= l) {return Node();}if (a <= l && r <= b) {return dat[p];}int m = (l + r) / 2;int chl = p * 2 + 1, chr = p * 2 + 2;pushdown(p, l, r);return query(a, b, chl, l, m) + query(a, b, chr, m, r);}
};
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n, q;cin >> n >> q;vector<int> a(n);for (int i = 0; i < n; ++i) {cin >> a[i];}ST tr(a);while (q--) {int op;cin >> op;if (op == 1) {int l, r;cin >> l >> r;l -= 1;auto nd = tr.query(l, r, 0, 0, n);ll res = 0;for (int i = 0; i < 3; ++i) {for (int j = 0; j < i; ++j) {res += nd.num[i][j];}}cout << res << '\n';} else {int l, r;vector<int> b(3);cin >> l >> r;l -= 1;for (int i = 0; i < 3; ++i) {cin >> b[i];}tr.change(l, r, b, 0, 0, n);}}return 0;
}
http://www.yayakq.cn/news/533666/

相关文章:

  • 高端网站建设 深圳张家港江阴网站制作
  • 建个可以注册会员网站多少钱做查询系统网站
  • 创建一个网站需要多少钱全国企业系统网站建设
  • 做网站工作的怎么填职务嘉兴优化网站哪家好
  • 西安电商网站制作北京做网络工程公司的网站
  • python做网站多么个人理财的网站开发
  • 网站开发后 怎么换前端网校网站建设多少钱
  • 青州专业网站建设wordpress 新窗口打开
  • 理性仁网站如何做估值分析外链网站
  • 手机网站建设 苏州设计素材网站合集
  • 蒙城做网站的公司生成器在线制作
  • 信息展示网站系统微信微网站开发教程
  • 宜昌城市建设学校网站制作什么网站好
  • 做网站 超速云开发公司消防未移交物业
  • 成都市分类信息网站开发opencms做网站 谁
  • 嘉兴建网站wordpress界面菜单怎么弄
  • 国哥说军事最新消息网站排名优化培训哪家好
  • 网站加载等待word页面设计模板
  • 哈尔滨网站域名归那里管智能小程序开发者平台
  • 哪个网站是营销型网站做网站 需要什么样的服务器
  • 网站查询工信部wordpress个人主题
  • 郑州达云通网站建设公司线上平面设计培训
  • 做商业网站需要注册公司吗如何制作wordpress模板下载地址
  • 网站多语言包制作网线水晶头
  • 江门网站推广策划传媒网站给行业做宣传
  • 网站加载很慢网络广告的优缺点
  • 做网站服务器用国外的商业网站开发 流程
  • 外贸建站用什么平台好灰色的网站
  • 仿站教程龙华网站开发
  • 怎么做网站教程++用的工具济南建设网站需要