• cogs 2569. [東方] 博丽灵梦 梦想妙珠


    二次联通门 : cogs 2569. [東方] 博丽灵梦 梦想妙珠

    /*
        cogs 2569. [東方] 博丽灵梦 梦想妙珠
    
        莫队水过。。
        
        好久没一遍AC了。。
        
        卡线上榜2333 
    */
    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    
    char Buf[100000001], *buf = Buf;
    int BUF = 100000001;
    
    void read (int &now)
    {
        for (now = 0; !isdigit (*buf); ++ buf);
        for (; isdigit (*buf); now = now * 10 + *buf - '0', ++ buf);
    }
    
    #define Max 100000
    
    int belong[Max];
    
    struct Data
    {
        int l, r, c, Id;
        
        bool operator < (const Data &now) const
        {
            return belong[this->l] == belong[now.l] ? this->r < now.r : belong[this->l] < belong[now.l];
        }
    };
    
    int count[Max << 1 | 1];
    
    Data query[Max | 1];
    int number[Max | 1];
    
    int Answer[Max];
    
    #define Cogs
    
    int main (int argc, char *argv[])
    {
    
    #ifdef Cogs
    
        freopen ("mengxiangmiaozhu.in", "r", stdin);
        freopen ("mengxiangmiaozhu.out", "w", stdout);
        fread (buf, 1, BUF, stdin);
        
    #endif
        
        int N, M;
        read (N);
        register int i;
        int x;
        
        int K_Size = sqrt (N);
            
        for (i = 1; i <= N; ++ i)
            read (number[i]), belong[i] = (i + 1) / K_Size;
        
        read (M);
        
        for (i = 1; i <= M; ++ i)
        {
            read (query[i].l);
            read (query[i].r);
            read (query[i].c);
        }
        
        for (i = 1; i <= M; ++ i)
            query[i].Id = i;
            
        std :: sort (query + 1, query + 1 + M);
        
        int l = 1, r = 0;
        
        for (i = 1; i <= M; ++ i)
        {
            
            for (; l < query[i].l; -- count[number[l]], ++ l);
            for (; l > query[i].l; -- l, ++ count[number[l]]);
            for (; r < query[i].r; ++ r, ++ count[number[r]]);
            for (; r > query[i].r; -- count[number[r]], -- r);
            
            Answer[query[i].Id] = count[query[i].c];
        } 
        
        for (i = 1; i <= M; ++ i)
            printf ("%d
    ", Answer[i]);
            
        return 0;
    }
  • 相关阅读:
    opencv-活体检测
    人脸识别
    Opencv-python基本操作
    白话深度学习与Tensorflow(二)
    Linux系统入门(一)-未完成
    编程题29 题目:求对角线元素之和
    编程题28 题目 排序
    编程题27 题目:求100之内的素数
    编程题 18兵乓球比赛
    编程题21 求阶数总和
  • 原文地址:https://www.cnblogs.com/ZlycerQan/p/7341304.html
Copyright © 2020-2023  润新知