static void Main() { var N = int.Parse(Console.ReadLine()); var L = new List <Point>(); for (int i = 0; i < N; ++i) { var buf = Console.ReadLine().Split(new char[] { ' ' }); var p = new Point(); p.w = int.Parse(buf[0]); p.h = int.Parse(buf[1]); L.Add(p); } L.Sort(delegate(Point p1, Point p2){ if (p1.h != p2.h) { return(p1.h - p2.h); } return(-(p1.w - p2.w)); }); var st = new SegTree <int>(100001, Math.Max); foreach (var p in L) { st.Update(p.w, st.Query(0, p.w) + 1); } Console.WriteLine(st.Query(0, st.Count)); }
static void Main() { var N = int.Parse(Console.ReadLine()); var S = new SegTree <int>(N, Math.Max); for (int i = 0; i < N; ++i) { var c = int.Parse(Console.ReadLine()) - 1; S.Update(c, S.Query(0, c + 1) + 1); } Console.WriteLine(N - S.Query(0, N)); }
static void Main() { var NQ = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); int N = NQ[0], Q = NQ[1]; var st = new SegTree <long>(N, delegate(long x, long y) { return(x ^ y); }); var A = Console.ReadLine().Split(' ').Select(long.Parse).ToArray(); for (int i = 0; i < N; ++i) { st.Update(i, A[i]); } for (int i = 0; i < Q; ++i) { var TXY = Console.ReadLine().Split(' ').Select(long.Parse).ToArray(); long T = TXY[0], X = TXY[1], Y = TXY[2]; if (T == 1) { A[X - 1] ^= Y; st.Update((int)X - 1, A[X - 1]); } else { Console.WriteLine(st.Query((int)X - 1, (int)Y)); } } }
static void Main() { var str = Console.ReadLine().Split(' '); int N = int.Parse(str[0]), K = int.Parse(str[1]); int Amax = 300000; var st = new SegTree <int>(Amax + 1, Math.Max); for (long i = 0; i < N; ++i) { var A = int.Parse(Console.ReadLine()); st.Update(A, st.Query(Math.Max(0, A - K), Math.Min(Amax, A + K) + 1) + 1); } Console.WriteLine(st.Query(0, Amax + 1)); }
static void Main() { //var st = new SegTree<int>(14, Math.Max); var st = new SegTree <int>(14, delegate(int x, int y) { return(x + y); }); st.Print(); st.Update(5, 3); st.Print(); st.Update(8, 4); st.Print(); st.Update(10, 2); st.Print(); Console.WriteLine(st.Query(3, 7)); }
public static void Main() { var nq = Console.ReadLine().Split().Select(int.Parse).ToArray(); var a = Console.ReadLine().Split().Select(int.Parse).ToArray(); SegTree <Tuple <int, int> > rmq = new SegTree <Tuple <int, int> >(a.Select((x, y) => new Tuple <int, int>(x, y + 1)).ToArray(), new Tuple <int, int>(int.MaxValue, -1), (x, y) => x.Item1 < y.Item1 ? x : y); for (int i = 0; i < nq[1]; i++) { var query = Console.ReadLine().Split().Select(int.Parse).ToArray(); if (query[0] == 1) { var tmp = rmq[query[1] - 1].Item1; rmq[query[1] - 1] = new Tuple <int, int>(rmq[query[2] - 1].Item1, query[1]); rmq[query[2] - 1] = new Tuple <int, int>(tmp, query[2]); } else { Console.WriteLine(rmq.Query(query[1] - 1, query[2] - 1).Item2); } } }
static void Main() { var N = long.Parse(Console.ReadLine()); var A = Console.ReadLine().Split(' ').Select(long.Parse).ToList(); var E = new List <long> [N]; for (int i = 0; i < N; ++i) { E[i] = new List <long>(); } for (int i = 0; i < N - 1; ++i) { var uv = Console.ReadLine().Split(' ').Select(int.Parse).ToList(); int u = uv[0], v = uv[1]; E[u - 1].Add(v - 1); E[v - 1].Add(u - 1); } //var st = new SegTree<int>(14, Math.Max); var st = new SegTree <int>(14, delegate(int x, int y) { return(x + y); }); st.Print(); st.Update(5, 3); st.Print(); st.Update(8, 4); st.Print(); st.Update(10, 2); st.Print(); Console.WriteLine(st.Query(3, 7)); }
static void Main() { var HWN = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); int H = HWN[0], W = HWN[1], N = HWN[2]; var Ymin = new int[W]; for (int w = 0; w < W; ++w) { Ymin[w] = H; } var Xmin = new int[H]; for (int h = 0; h < H; ++h) { Xmin[h] = W; } var XYList = new List <XYPoint>(); for (int i = 0; i < N; ++i) { var YX = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); int Y = YX[0] - 1, X = YX[1] - 1; XYList.Add(new XYPoint(X, Y)); Ymin[X] = Math.Min(Ymin[X], Y); Xmin[Y] = Math.Min(Xmin[Y], X); } XYList.Sort(delegate(XYPoint p1, XYPoint p2) { return(p1.Y - p2.Y); }); int xEnd = Xmin[0]; int yEnd = Ymin[0]; long ans = 0; for (int x = 0; x < xEnd; ++x) { ans += Ymin[x]; } var st = new SegTree <int>(W + 2, delegate(int x, int y) { return(x + y); }); for (int x = xEnd; x < W; ++x) { st.Update(x, 1); } int n = 0; for (int y = 0; y < yEnd; ++y) { while (n < N && XYList[n].Y <= y) { var p = XYList[n]; st.Update(p.X, 1); n += 1; } int add = st.Query(0, Xmin[y]); ans += add; } Console.WriteLine(ans); }
static void Main() { var str = Console.ReadLine().Split(" "); var N = int.Parse(str[0]); var Q = int.Parse(str[1]); var C = new int[N]; str = Console.ReadLine().Split(" "); for (int i = 0; i < N; ++i) { C[i] = int.Parse(str[i]); } var LR = new List <List <int> >(); for (int q = 0; q < Q; ++q) { str = Console.ReadLine().Split(" "); int l = int.Parse(str[0]); int r = int.Parse(str[1]); LR.Add(new List <int> { q, l, r }); } LR.Sort((x, y) => x[2] - y[2]); var I = new int[N + 1]; for (int i = 0; i < I.Length; ++i) { I[i] = -1; } var st = new SegTree <int>(N, (x, y) => x + y, 0); var ans = new int[Q]; int j = 0; for (int iq = 0; iq < Q; ++iq) { int q = LR[iq][0]; int l = LR[iq][1]; int r = LR[iq][2]; for (; j < r; ++j) { int c = C[j]; int iprev = I[c]; I[c] = j; if (iprev != -1) { st.Update(iprev, 0); } st.Update(j, 1); } ans[q] = st.Query(l - 1, r); } Console.WriteLine(String.Join("\n", ans)); }
static void Main() { //-> //var st = new SegTree<int>(14, Math.Max); //-> var st = new SegTree<int>(14, delegate(int x, int y) {return x+y;}); //-> st.Print(); //-> //-> st.Update(5, 3); //-> st.Print(); //-> st.Update(8, 4); //-> st.Print(); //-> st.Update(10, 2); //-> st.Print(); //-> //-> Console.WriteLine(st.Query(3, 7)); var NQ = Console.ReadLine().Split().Select(int.Parse).ToList(); int N = NQ[0], Q = NQ[1]; int M = 200000; var st = new SegTree <int>(M, Math.Min); var Y = new Yochien[M]; for (int i = 0; i < M; ++i) { Y[i] = new Yochien(); } var LY = new int[N]; // i-th infant belongs to LY[i]-th Yochien. var LI = new int[N]; // i-th infant belongs to LI-th index (of LY[i]-th Yochien). for (int i = 0; i < N; ++i) { var AB = Console.ReadLine().Split().Select(int.Parse).ToList(); int A = AB[0], B = AB[1]; LY[i] = B - 1; LI[i] = Y[LY[i]].Add(A); //Console.WriteLine($"{LY[i]}, {LI[i]}"); } for (int i = 0; i < M; ++i) { st.Update(i, Y[i].Max()); } for (int iq = 0; iq < Q; ++iq) { var CD = Console.ReadLine().Split().Select(int.Parse).ToList(); int C = CD[0], D = CD[1]; var ly_old = LY[C - 1]; var y_old = Y[ly_old]; int A = y_old.Update(LI[C - 1], 0); var ly_new = LY[C - 1] = D - 1; var y_new = Y[ly_new]; LI[C - 1] = y_new.Add(A); st.Update(ly_old, y_old.Max()); st.Update(ly_new, y_new.Max()); Console.WriteLine(st.Query(0, st.Count)); } }