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

设计精美的国外网站建设个人博客网站制作

设计精美的国外网站,建设个人博客网站制作,室内设计网站排行榜前十名知乎,深圳网络推广运营企业原题链接:D-小红的区间修改(一)_牛客周赛 Round 95 题目背景: 初始拥有一个长度10^100元素全为0的数组,进行q查询,每次查询如果区间内的元素都为0就将区间变为首项为 1、公差为 1 的等差数列;否…

原题链接:D-小红的区间修改(一)_牛客周赛 Round 95

题目背景:

        初始拥有一个长度10^100元素全为0的数组,进行q查询,每次查询如果区间内的元素都为0就将区间变为首项为 1、公差为 1 的等差数列;否则不进行任何操作。输出每次操作后数组不同元素的个数。

数据范围:

        1 <= q <= 3e5,1 <= l,r <= 3e5。

解法1(赛时想到的暴力解法):

思路:

       看到区间修改动态更新数据范围还是3e5就不难想到使用线段树。

        每次查询区间判断区间和是否为0即可,如果为0且当前区间大于之前的所有区间就更新答案并输出,否者输出历史最大答案。

ac代码: 
#include <bits/stdc++.h>#define ioscc ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define endl '\n'
#define me(a, x) memset(a, x, sizeof a)
#define all(a) a.begin(), a.end()
#define sz(a) ((int)(a).size())
#define pb(a) push_back(a)
using namespace std;typedef unsigned long long ull;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<vector<int>> vvi;
typedef vector<int> vi;
typedef vector<bool> vb;const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int MAX = (1ll << 31) - 1;
const int MIN = 1 << 31;
const int MOD = 1e9 + 7;
const int N = 3e5 + 10;template <class T>
ostream &operator<<(ostream &os, const vector<T> &a) noexcept
{for (int i = 0; i < sz(a) - 10; i++)std::cout << a[i] << ' ';return os;
}template <class T>
istream &operator>>(istream &in, vector<T> &a) noexcept
{for (int i = 0; i < sz(a) - 10; i++)std::cin >> a[i];return in;
}/* ----------------- 有乘就强转,前缀和开ll ----------------- */struct Node
{int l, r;ll sum;ll add;
} tr[N * 4];void pushup(int u)
{tr[u].sum = tr[u << 1].sum + tr[u << 1 | 1].sum;
}void pushdown(int u)
{if (tr[u].add){tr[u << 1].sum += tr[u].add * (tr[u << 1].r - tr[u << 1].l + 1);tr[u << 1 | 1].sum += tr[u].add * (tr[u << 1 | 1].r - tr[u << 1 | 1].l + 1);tr[u << 1].add += tr[u].add;tr[u << 1 | 1].add += tr[u].add;tr[u].add = 0;}
}void build(int u, int l, int r)
{tr[u] = {l, r, 0, 0};if (l == r)return;int mid = (l + r) >> 1;build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);
}ll query(int u, int l, int r)
{if (tr[u].l >= l && tr[u].r <= r)return tr[u].sum;pushdown(u);int mid = (tr[u].l + tr[u].r) >> 1;ll sum = 0;if (l <= mid)sum = query(u << 1, l, r);if (r > mid)sum += query(u << 1 | 1, l, r);return sum;
}void update(int u, int l, int r, int v)
{if (tr[u].l >= l && tr[u].r <= r){tr[u].sum += (ll)(tr[u].r - tr[u].l + 1) * v;tr[u].add += v;return;}int mid = (tr[u].l + tr[u].r) >> 1;pushdown(u);if (l <= mid)update(u << 1, l, r, v);if (r > mid)update(u << 1 | 1, l, r, v);pushup(u);
}void solve()
{build(1, 1, N);int sum = 0; // 元素个数int q;cin >> q;while (q--){int l, r;cin >> l >> r;int len = r - l + 1;int t = query(1, l, r);if (t){cout << sum + 1 << endl;continue;}update(1, l, r, 1);if (len > sum)sum = len;cout << sum + 1 << endl;}
}int main()
{ioscc;solve();return 0;
}

解法2(官方解法):

思路:

        将先前处理过的区间内所有元素的下标存到set里面,每次使用给出的 l 二分找最大的边界(没有元素就为尾迭代器),如果找到的边界大于 r 就说明可以区间全为 0 ,即可放置,否者不能放置;每次将区间内的元素都插入到 set 中,每个元素最多插入 1 次。

ac代码:
#include <bits/stdc++.h>#define ioscc ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define endl '\n'
#define me(a, x) memset(a, x, sizeof a)
#define all(a) a.begin(), a.end()
#define sz(a) ((int)(a).size())
#define pb(a) push_back(a)
using namespace std;typedef unsigned long long ull;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<vector<int>> vvi;
typedef vector<int> vi;
typedef vector<bool> vb;const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int MAX = (1ll << 31) - 1;
const int MIN = 1 << 31;
const int MOD = 1e9 + 7;
const int N = 1e5 + 10;template <class T>
ostream &operator<<(ostream &os, const vector<T> &a) noexcept
{for (int i = 0; i < sz(a) - 10; i++)std::cout << a[i] << ' ';return os;
}template <class T>
istream &operator>>(istream &in, vector<T> &a) noexcept
{for (int i = 0; i < sz(a) - 10; i++)std::cin >> a[i];return in;
}/* ----------------- 有乘就强转,前缀和开ll ----------------- */void solve()
{int q;cin >> q;int maxx = 0;set<int> s;while (q--){int l, r;cin >> l >> r;auto it = s.lower_bound(l);if (it == s.end() || *it > r){maxx = max(maxx, r - l + 1);for (int i = l; i <= r; ++i)s.emplace(i);}cout << maxx + 1 << endl;}
}int main()
{ioscc;solve();return 0;
}

解法3(大佬解法):

思路:

        与解法2类似,不过多赘述。

ac代码:
#include <bits/stdc++.h>#define ioscc ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define endl '\n'
#define me(a, x) memset(a, x, sizeof a)
#define all(a) a.begin(), a.end()
#define sz(a) ((int)(a).size())
#define pb(a) push_back(a)
using namespace std;typedef unsigned long long ull;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<vector<int>> vvi;
typedef vector<int> vi;
typedef vector<bool> vb;const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int MAX = (1ll << 31) - 1;
const int MIN = 1 << 31;
const int MOD = 1e9 + 7;
const int N = 1e5 + 10;template <class T>
ostream &operator<<(ostream &os, const vector<T> &a) noexcept
{for (int i = 0; i < sz(a) - 10; i++)std::cout << a[i] << ' ';return os;
}template <class T>
istream &operator>>(istream &in, vector<T> &a) noexcept
{for (int i = 0; i < sz(a) - 10; i++)std::cin >> a[i];return in;
}/* ----------------- 有乘就强转,前缀和开ll ----------------- */void solve()
{int q;cin >> q;map<int, int> mp;set<int> s;int mx = 0;while (q--){int l, r;cin >> l >> r;if (s.empty()){s.insert(r);mp[r] = l;mx = r - l + 1 + 1;cout << mx << endl;}else{auto p = s.lower_bound(l);int rr = *s.lower_bound(l);int ll = mp[rr];if (ll > r || rr < l || p == s.end()){s.insert(r);mp[r] = l;mx = max(mx, r - l + 1 + 1);cout << mx << endl;}else{cout << mx << endl;}}}
}int main()
{ioscc;solve();return 0;
}


文章转载自:

http://VrpXZ6Sf.wxccm.cn
http://WVdX7gsr.wxccm.cn
http://KmPU9nLB.wxccm.cn
http://bMGTzStz.wxccm.cn
http://5N7WsOLs.wxccm.cn
http://tRYqDOl2.wxccm.cn
http://tKTjdBSM.wxccm.cn
http://CyiVE5Wr.wxccm.cn
http://DA1vKUFs.wxccm.cn
http://hy9bTC2y.wxccm.cn
http://52TUQHVr.wxccm.cn
http://isvFJA7A.wxccm.cn
http://2yuN5MeZ.wxccm.cn
http://AkzzONr4.wxccm.cn
http://qYBb6YbV.wxccm.cn
http://f2iv2Uto.wxccm.cn
http://6twR7GJl.wxccm.cn
http://7BrQOjHV.wxccm.cn
http://E55hsDMY.wxccm.cn
http://L1q8lAcX.wxccm.cn
http://Jqyq4Gs4.wxccm.cn
http://UF5OHVUE.wxccm.cn
http://cQPCCWWE.wxccm.cn
http://xyQpHQOx.wxccm.cn
http://o3yqekv7.wxccm.cn
http://GDemW8hM.wxccm.cn
http://S7oiWuYM.wxccm.cn
http://H4PG600q.wxccm.cn
http://6WCOWD6W.wxccm.cn
http://zULPtxwc.wxccm.cn
http://www.dtcms.com/wzjs/777803.html

相关文章:

  • 上海网站托管成年做羞羞的视频网站space
  • 一个网站上线需要什么网站建站哪个好
  • 宜州网站建设服务青海省教育厅门户网站首页
  • 网站建设开发哪家质量好凡客诚品官方网站的代码
  • 散热器 东莞网站建设线上推广方式
  • 怎么样才能建立网站平台烟台建设企业网站
  • 广州工作室做网站html5做网站导航页
  • 宿迁住房和城乡建设网站深圳网站备案拍照
  • 福建漳州东山建设局网站一个商务宣传怎么做网站合适
  • 成都做营销型网站建设乌拉圭网站后缀
  • 外贸网站源码怎么建专业做网带
  • 文件外链网站浙江网站建设网
  • 网站首页做很多个关键词proxy网页在线代理
  • 南宁有做网站的公司吗永久免费的连外网的软件
  • 网站后台培训学校加盟网网站建设
  • 好网站建设公司有哪些拼多多无货源电商怎么做
  • 哪里做网站比较快pcc购物平台
  • 大学生网站建设策划书范文县区社保经办网站建设
  • 昆明城乡建设局网站制作网站公司哪里好
  • 网站建设源码包做网站要不要学ps
  • 奉贤网站建设公司wamp wordpress 安装
  • 电脑软件下载官方网站在哪里可以建网站
  • 网站方案书个人网站做淘宝客容易封吗
  • 杭州网站优化排名揭秘低价网站建设危害
  • IT男为女朋友做的求婚网站免费制作一个自己的网站吗
  • 移动网站 用户体验公司logo设计免费
  • 郑州做网站哪家便宜大连网站的优化
  • 黄岐建网站网站开发引用思源黑体
  • 网站建设费 科目3d建模游戏
  • 泰安网站推广公司网站设计与开发