zoukankan      html  css  js  c++  java
  • 洛谷T21778 过年

    T21778 过年

    输入输出样例

    输入样例#1:
    6 3
    1 5 1
    2 3 2
    3 4 2
    输出样例#1:
    1
    1
    2
    1
    1
    -1


    线段树每一个节点维护一个pari,表示出现次数和出现的数是多少
    每一个询问差分一下,区间结束把它减掉。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<stack>
    #include<vector>
    #include<cstring>
    #include<queue>
    #include<bitset>
    using namespace std;
    const int maxn=1e5+23333;
    typedef long long ll;
    typedef pair<int,int> par;
    inline int read(){
        int an=0,f=1;
        char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch<='9'&&ch>='0'){an=an*10+(ch^48);ch=getchar();}
        return an*f;
    }
    int n,m,tot;
    struct saber{
    int l,r,k;
    }b[maxn],c[maxn];
    par operator +(par x,par y){
        return (x.first<y.first?y:x);
    }
    struct Tree{
    int l[maxn<<2],r[maxn<<2];
    par p[maxn<<2];
        inline void build(int k,int x,int y){
            l[k]=x,r[k]=y;p[k].second=x;
            if(x==y){return;}
            int mid=x+y>>1;
            build(k<<1,x,mid);
            build(k<<1|1,mid+1,y);
        }
        inline void add(int k,int x,int val){
            if(l[k]==r[k]){p[k].first+=val;return;}
            int mid=l[k]+r[k]>>1;
            if(x<=mid)add(k<<1,x,val);
            else add(k<<1|1,x,val);
            p[k]=p[k<<1]+p[k<<1|1];
        }
        inline void insert(int x){add(1,x,1);}
        inline void erase(int x){add(1,x,-1);}
        inline void query(){
            if(p[1].first)cout<<p[1].second<<"
    ";
            else cout<<"-1
    ";
        }
    }t;
    bool operator < (saber x,saber y){
        return x.l<y.l;
    }
    inline bool cmp(saber x,saber y){
        return x.r<y.r;
    }
    inline void parpare(){
        n=read();m=read();
        for(int i=1;i<=m;i++){
            b[i].l=read();b[i].r=read();b[i].k=read();
            c[i]=b[i];
        }
        sort(b,b+1+m);
        sort(c+1,c+1+m,cmp);
        t.build(1,0,1e5);
    }
    inline void work(){
        int j=1,k=1;
        for(int i=1;i<=n;i++){
            while(b[j].l==i&&j<=m)t.insert(b[j].k),j++;
            while(c[k].r==i-1&&k<=m)t.erase(c[k].k),k++;
            t.query();
        }
    }
    int main(){
        ios::sync_with_stdio(0);
        parpare();
        work();
        return 0;
    }
    
    

    只有一个测试点,而且还修正一次..

  • 相关阅读:
    SQLyog 使用笔记,自增主键数据冲突错误
    扫一扫的意义
    js 加法运算
    linux crontab执行shell脚本中包含相对路径的问题
    Nginx笔记总结十二:nginx版本号隐藏
    Nginx笔记总结十一:Nginx重写规则指南
    Nginx笔记总结十:Nginx日志切割
    Nginx笔记总结九:Nginx日志配置
    Nginx笔记总结八:ngx_http_core_module模块中的变量
    Nginx笔记总结七:root和alias文件路径配置
  • 原文地址:https://www.cnblogs.com/ck666/p/8439979.html
Copyright © 2011-2022 走看看