cogs 2569. [東方] 博麗靈夢 夢想妙珠
阿新 • • 發佈:2017-08-10
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. [東方] 博麗靈夢 夢想妙珠