首页 > 其他分享 >[Ynoi Easy Round 2021] TEST_152

[Ynoi Easy Round 2021] TEST_152

时间:2024-08-19 20:16:11浏览次数:11  
标签:insert 152 val int pos Ynoi tim 2021 using

题目链接 : [Ynoi Easy Round 2021] TEST_152

一道思路接近却比这道题难点的题目 [Ynoi2012] NOIP2015 充满了希望

经典结论 : 无论怎么覆盖,总段数都是\(O(覆盖次数)\)的。

证明的话,考虑到每次推平只会使得左右端点的段分裂开,使得段数+1,而中间的段直接被覆盖,所以最多总段数只会为\(O(n)\)

如何维护全局和?直接用一个ODT维护连续段即可,推平时减去原贡献,加上新贡献。

but有一个操作的区间限制,直接将询问挂在r上扫描线。

用一个树状数组维护当前时间下每个时间的贡献,加减贡献都在这个树状数组上加减。

时间复杂度\(O(n\log n)\)

点此查看代码
#include<bits/stdc++.h>
#include<bits/extc++.h>
// using namespace __gnu_pbds;
// using namespace __gnu_cxx;
using namespace std;
#define infile(x) freopen(x,"r",stdin)
#define outfile(x) freopen(x,"w",stdout)
#define errfile(x) freopen(x,"w",stderr)
#ifdef LOCAL
    FILE *InFile = infile("in.in"),*OutFile = outfile("out.out");
    // FILE *ErrFile=errfile("err.err");
#else
    FILE *Infile = stdin,*OutFile = stdout;
    //FILE *ErrFile = stderr;
#endif
using ll=long long;using ull=unsigned long long;
using db = double;using ldb = long double;
const int N = 5e5 + 10;
struct BIT{
private:
    ll tree[N];
#define lowbit(x) (x&(-x))
public:
    int mx;
    inline void update(int pos,ll val){
        if(!pos) return;
        for(int i = pos;i <= mx;i += lowbit(i))
            tree[i] += val;
    }
    inline ll query(int pos){
        ll res = 0;
        for(int i = pos; i;i -= lowbit(i))
            res += tree[i];
        return res;
    }
}Tr;
class ODT{
private:
    struct node{
        int l,r;mutable int val,tim;
        bool operator < (node x) const {return l < x.l;};
        node(int L,int R = 0,int Val = 0,int Tim = 0):l(L),r(R),val(Val),tim(Tim){}
    };
    set<node> s;
#define sit set<node>::iterator
public:
    inline sit split(int pos){
        sit it = s.lower_bound(node(pos));
        if(it != s.end() && it->l == pos) return it;
        it--;
        int l = it->l,r = it->r,val = it->val,tim = it->tim;
        s.erase(it);
        s.insert(node(l,pos-1,val,tim));
        return s.insert(node(pos,r,val,tim)).first;
    }
    inline void assign(int l,int r,int val,int tim){
        sit it2 = split(r+1),it1 = split(l);
        for(auto it = it1;it != it2; ++it)
            Tr.update(it->tim,-1ll*(it->r - it->l + 1) *(it->val));
        Tr.update(tim,1ll*(r-l+1)*val);
        s.erase(it1,it2);
        s.insert(node(l,r,val,tim));
    }
    inline void insert(int l,int r,int val){s.insert(node(l,r,val));}
}T;

int n,m,q;
ll ans[N];
struct node{int id,l;};
vector<node> Q[N];
struct node1{int l,r,val;}c[N];
inline void solve(){
    cin>>n>>m>>q;
    Tr.mx = n;
    T.insert(1,m,0);
    for(int i = 1,l,r,v;i <= n; ++i){
        cin>>l>>r>>v;
        c[i] = {l,r,v};
    }
    for(int i = 1,l,r;i <= q; ++i){
        cin>>l>>r;
        Q[r].push_back({i,l});
    }
    for(int i = 1;i <= n; ++i){
        T.assign(c[i].l,c[i].r,c[i].val,i);
        for(auto j:Q[i]) ans[j.id] = Tr.query(i) - Tr.query(j.l-1);
    }
    for(int i = 1;i <= q; ++i) cout<<ans[i]<<'\n';
}
signed main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cout.tie(nullptr)->sync_with_stdio(false);
    solve(); 
}

标签:insert,152,val,int,pos,Ynoi,tim,2021,using
From: https://www.cnblogs.com/hzoi-Cu/p/18368040

相关文章

  • Nssctf [SWPUCTF 2021 新生赛]error
    进入之后是一个搜索框,里面叫你传一个id值,先看一看网页代码,发现一端后端数据库代码,说明是报错注入   extractValue()报错注入先进行字段判断,使用"1'groupby1#"来判断1'groupby1#正常回显 出错回显 说明有三个字段,接着进行数据库名的爆破1'unionsel......
  • Ynoi2016镜中的昆虫
    [Ynoi2016]镜中的昆虫简化题意给定长为\(n\)序列\(a\),两种操作\(m\)次:1lrx:将\([l,r]\)修改为\(x\)2lr:查询\([l,r]\)出现了多少种不同的数\(n,m\le10^5\)题解\(A\)这道题还是很不容易的,起码用了几天的时间。思路也是换了又换,从分块......
  • P4689 [Ynoi2016] 这是我自己的发明 与 P5268 [SNOI2017] 一个简单的询问0
    思路:首先可以先考虑没有换根的情况。先将树拍到dfn序上,那么一个子树\(u\)的所有点的dfn序区间为\([dfn_u,dfn_u+siz_u-1]\)。那么询问变为:每次给定两个区间\([l_1,r_1],[l_2,r_2]\),对于在第一个区间内的点\(x\)和在第二个区间的点\(y\),若\((x,y)\)有贡献,当且仅......
  • 安装IDEA2021.2.1(含安装包)及其扩展设置
    一、下载通过百度网盘分享的文件:ideaIU-2021.2.1.exe链接:https://pan.baidu.com/s/1cCUHNm0dpWlfkxf5RCEgfw 提取码:v62e 二、安装 安装视频网址:Java基础概念-12-idea的概述和下载安装_哔哩哔哩_bilibili三、idea中的第一个代码 如何该类名四、扩展设置......
  • Google Earth Engine(GEE)——1986-2021年黄河入海口区域的逐年影像展示案例分析,并加载
    函数:size()Returnsthenumberofelementsinthecollection.返回集合中元素的数量。Arguments:this:collection(FeatureCollection):Thecollectiontocount.Returns:Integer融合影像可以一个接一个进行融合merge(collection2)Mergestwoimagecollectionsi......
  • P8518 [IOI2021] 分糖果 题解
    DescriptionKhong阿姨正在给附近一所学校的学生准备\(n\)盒糖果。盒子的编号分别为\(0\)到\(n-1\),开始时盒子都为空。第\(i\)个盒子\((0\leqi\leqn-1)\)至多可以容纳\(c[i]\)块糖果(容量为\(c[i]\))。Khong阿姨花了\(q\)天时间准备糖果盒。在第\(j\)天......
  • P6109 [Ynoi2009] rprmq1 题解
    Description有一个\(n\timesn\)的矩阵\(a\),初始全是\(0\),有\(m\)次修改操作和\(q\)次查询操作,先进行所有修改操作,然后进行所有查询操作。一次修改操作会给出\(l_1,l_2,r_1,r_2,x\),代表把所有满足\(l_1\lei\ler_1\)且\(l_2\lej\ler_2\)的\(a_{i,j}\)元......
  • Efficient DETR:别再随机初始化了,旷视提出单解码层的高效DETR | CVPR 2021
    EfficientDETR结合密集检测和稀疏集合检测的优点,利用密集先验来初始化对象容器,弥补单层解码器结构与6层解码器结构的差距。在MSCOCO上进行的实验表明,仅3个编码器层和1个解码器层即可实现与最先进的目标检测方法竞争的性能,在CrowdHuman密集数据集上的性能也远远优于其它检......
  • SMCA:港中文提出注意力图校准的DETR加速方案 | ICCV 2021
    为了加速DETR收敛,论文提出了简单而有效的SpatiallyModulatedCo-Attention(SMCA)机制,通过在初始边界框位置给予较高的协同注意力响应值的约束来构建DETR的回归感知协同注意力。此外,将SMCA扩展为多头注意力和尺度选择注意力后,对比DETR可以实现更好的性能(108周期45.6mAPvs500周期......
  • [Ynoi2016] 镜中的昆虫 题解
    难度在最近遇到的题里相对较高,在这里写一篇珂学题解。(以下是学校给的部分分)\(20\%\):直接暴力枚举。另外\(20\%\):假如我们取\(pre\),对于\(pre<l\)的,\(ans++\),明显二维偏序,树状数组或\(cdq\)即可,时间复杂度\(O(n\logn)\)。另外\(40\%\):相当于多加一个时间维,三维偏序,\(......