1. 程式人生 > >cogs 2569. [東方] 博麗靈夢 夢想妙珠

cogs 2569. [東方] 博麗靈夢 夢想妙珠

spa log fde per tar def 二次 efi tor

二次聯通門 : 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\n", Answer[i]); return 0; }

cogs 2569. [東方] 博麗靈夢 夢想妙珠