Пример #1
0
 private void Events_MapZoomEnded(BIT.AVL.Silver.Map.Map map, MapEventArgs args)
 {
     if (IsEnabled)
     {
         _ZoomLevelTextBox.Text = GetZoomLevel();
     }
 }
Пример #2
0
        public ZoomSliderControl(BIT.AVL.Silver.Map.Map map)
        {
            _Map = map;
            DefaultStyleKey = typeof(ZoomSliderControl);

            if(HtmlPage.IsEnabled)
            {
                _Thumb = new Thumb();
                _Slider = this;

                // Slider Events
                _Slider.GotFocus += Slider_GotFocus;
                _Slider.LostFocus += Slider_LostFocus;
                _Slider.ValueChanged += ZoomControl_ValueChanged;

                // Map Events
                _Map.Events.MapMouseEnter += Events_MapMouseEnter;
                _Map.Events.MapMouseLeave += Events_MapMouseLeave;
                _Map.Events.MapZoomStarted += Events_MapZoomStarted;
                _Map.Events.MapZoomEnded += Events_MapZoomEnded;
                _Map.Events.MapZoomChanged += Events_MapZoomChanged;
                _Map.Events.MapMouseWheel += Events_MapMouseWheel;
                _Map.Events.MapDoubleClick += Events_MapDoubleClick;
                _Map.Events.MapTileSourceChanged += Events_MapTileSourceChanged;

                SetTileSourceZoomLevels();
                _UpdateSlider = true;
            }
        }
Пример #3
0
    static int[] Solve(int n, long[] a)
    {
        var        res = new int[n];
        BIT <long> bit = new BIT <long>(n + 1, 0, (x, y) => x + y);

        for (int i = 0; i < bit.Size; i++)
        {
            bit.Operate(i, i);
        }
        for (int i = a.Length - 1; i >= 1; i--)
        {
            int valid   = n + 1;
            int invalid = -1;
            while (valid - invalid > 1)
            {
                var mid = (valid + invalid) / 2;
                if (a[i] < bit.Query(mid))
                {
                    valid = mid;
                }
                else
                {
                    invalid = mid;
                }
            }
            res[i] = valid;
            bit.Operate(res[i], -res[i]);
        }
        res[0] = (int)bit.Query(bit.Size - 1);
        return(res);
    }
Пример #4
0
    static void Main()
    {
        Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput())
        {
            AutoFlush = false
        });
        var h = Read();
        var n = h[0];
        var a = Read();

        var st = new BIT(n);

        for (int i = 0; i < n; i++)
        {
            st.Add(i + 1, a[i]);
        }

        for (int k = 0; k < h[1]; k++)
        {
            var q = Read();
            if (q[0] == 0)
            {
                st.Add(q[1] + 1, q[2]);
            }
            else
            {
                Console.WriteLine(st.Sum(q[1] + 1, q[2] + 1));
            }
        }
        Console.Out.Flush();
    }
Пример #5
0
 private void Events_MapZoomChanged(BIT.AVL.Silver.Map.Map map, double zoomLevel)
 {
     if (IsEnabled)
     {
         _ZoomLevelTextBox.Text = GetZoomLevel();
     }
 }
Пример #6
0
    public static void Main()
    {
        var n        = NextInt;
        var k        = NextInt;
        var reducedA = new int[n];

        for (int i = 0; i < n; i++)
        {
            reducedA[i] = NextInt - k;
        }
        var accum = new long[n + 1];

        for (int i = 0; i < reducedA.Length; i++)
        {
            accum[i + 1] = accum[i] + reducedA[i];
        }
        //var compressDict = accum.Distinct().OrderBy(x => x).Select((elem, ind) => new Tuple { Item1 = elem, Item2 = ind }).ToDictionary(x => x.Item1, x => x.Item2);
        var distincted = accum.Distinct().ToArray();

        Array.Sort(distincted);
        long      res = 0;
        BIT <int> bit = new BIT <int>(distincted.Length, 0, (x, y) => x + y);

        for (int i = 0; i < accum.Length; i++)
        {
            var ind = Array.BinarySearch(distincted, accum[i]);
            res += bit.Query(ind);
            bit.Operate(ind, 1);
        }
        Console.WriteLine(res);
    }
Пример #7
0
    public int ReversePairs(int[] nums)
    {
        SortedSet <long> allNumbers = new SortedSet <long>();

        foreach (int num in nums)
        {
            allNumbers.Add((long)num);
            allNumbers.Add(2 * (long)num);
        }

        Dictionary <long, int> values = new Dictionary <long, int>();
        int index = 0;

        foreach (var num in allNumbers)
        {
            values.Add(num, index);
            index++;
        }

        int res = 0;
        BIT bit = new BIT(values.Count);

        for (int i = 0; i < nums.Length; i++)
        {
            int left  = values[(long)nums[i] * 2];
            int right = values.Count - 1;
            res += bit.Query(right + 1) - bit.Query(left + 1);
            bit.Update(values[(long)nums[i]] + 1, 1);
        }
        return(res);
    }
Пример #8
0
    // i 以下のインデックスのうち、交換回数が k 以下となる最小値
    static int[] GetLeft(int n, long k, int[] a)
    {
        var left = new int[n];
        var bit  = new BIT(n);
        var inv  = 0L;
        var ui   = new bool[n];
        var uj   = new bool[n];

        var q = TwoPointers(n, n, (i, j) =>
        {
            if (!uj[j] && j > 0)
            {
                inv -= bit.Sum(1, a[j - 1]);
                bit.Add(a[j - 1], -1);
            }

            if (!ui[i])
            {
                inv += bit.Sum(a[i] + 1, n + 1);
                bit.Add(a[i], 1);
            }

            ui[i] = uj[j] = true;
            return(inv <= k);
        });

        foreach (var(i, j) in q)
        {
            left[i] = j;
        }

        return(left);
    }
Пример #9
0
    static object Solve()
    {
        var n = int.Parse(Console.ReadLine());
        var a = Read();

        var map = new CompressionHashMap(a);
        var m   = map.Count;

        var dpu = new BIT(m);
        var dpd = new BIT(m);

        foreach (var v in a)
        {
            var i = map[v] + 1;

            dpu.Add(i, dpd.Sum(i - 1));
            dpd.Add(i, dpu.Sum(i + 1, m + 1));

            dpu.Add(i, 1);
            dpd.Add(i, 1);

            dpu[i] %= M;
            dpd[i] %= M;
        }

        return((dpu.Sum(m) + dpd.Sum(m) - 2 * n + M) % M);
    }
Пример #10
0
    static void Main()
    {
        var(n, qc) = Read2();
        var qs = Array.ConvertAll(new bool[qc], _ => Read());

        var bit = new BIT(n);

        Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput())
        {
            AutoFlush = false
        });
        foreach (var q in qs)
        {
            var k = q[1];

            if (q[0] == 1)
            {
                var v = bit.Sum(k <= n ? n - k + 1 : k - n, n + 1);
                Console.WriteLine(v % 2 == 0 ? k : 2 * n - k + 1);
            }
            else
            {
                bit.Add(k, 1);
            }
        }
        Console.Out.Flush();
    }
Пример #11
0
            void Build(int n)
            {
                Array.Sort(pos, (a, b) => (a.X == b.X ? a.Y - b.Y : a.X - b.X));
                int[]         a   = new int[n];
                HashSet <int> set = new HashSet <int>();

                for (int i = 0; i < n; i++)
                {
                    a[i] = pos[i].Y - pos[i].X;
                    set.Add(pos[i].Y - pos[i].X);
                }
                int num = set.Count;

                int[] b     = new int[num];
                int   index = 0;

                foreach (int element in set)
                {
                    b[index++] = element;
                }
                Array.Sort(b);
                BIT bit = new BIT(num + 1);

                for (int i = n - 1; i >= 0; i--)
                {
                    int poss = BinarySearch(b, a[i]) + 1;
                    int j    = bit.query(poss);
                    if (j != -1)
                    {
                        int dis = Math.Abs(pos[i].X - pos[j].X) + Math.Abs(pos[i].Y - pos[j].Y);
                        edges.Add((dis, pos[i].Id, pos[j].Id));
Пример #12
0
    static object Solve()
    {
        var n = int.Parse(Console.ReadLine());
        var a = Read();

        var p2  = MPows(2, n);
        var p2_ = MPows(MHalf, n);

        var map = new CompressionHashMap(a);
        var bit = new BIT(map.Count);

        var r = 0L;

        for (int i = 0; i < n; i++)
        {
            var v = map[a[i]] + 1;

            r += bit.Sum(v) % M * p2_[n - i];
            r %= M;

            bit.Add(v, p2[n - 1 - i]);
        }

        return(r);
    }
Пример #13
0
 private void Events_MapViewChanged(BIT.AVL.Silver.Map.Map map, MapEventArgs args)
 {
     if (IsEnabled)
     {
         _xCoordTextBox.Text = GetXCoordinate();
         _yCoordTextBox.Text = GetYCoordinate();
     }
 }
Пример #14
0
        public void solve()
        {
            int n   = sc.Int;
            var p   = new int[n];
            var l   = new int[n];
            var r   = new int[n];
            var idx = new int[n];

            for (int i = 0; i < n; i++)
            {
                idx[i] = i;
                sc.Multi(out p[i], out l[i], out r[i]);
            }
            var cmp = compress(p, l, r);

            p = p.Select(x => cmp[x]).ToArray();
            l = l.Select(x => cmp[x]).ToArray();
            r = r.Select(x => cmp[x]).ToArray();

            Array.Sort(idx, (i, j) => p[i].CompareTo(p[j]));
            var ql = new PriorityQueue <int>((i, j) => l[j].CompareTo(l[i]));
            var qr = new PriorityQueue <int>((i, j) => r[j].CompareTo(r[i]));

            for (int i = 0; i < n; i++)
            {
                ql.Push(i);
            }

            var  bit = new BIT(cmp.Count);
            long ans = 0;

            foreach (var i in idx)
            {
                while (ql.Count > 0 && l[ql.Top] <= p[i])
                {
                    int x = ql.Pop();
                    bit.add(p[x], 1);
                    qr.Push(x);
                }
                while (qr.Count > 0 && r[qr.Top] < p[i])
                {
                    int x = qr.Pop();
                    bit.add(p[x], -1);
                }
                ans += bit.sum(l[i], r[i] + 1);
            }
            for (int i = 0; i < n; i++)
            {
                if (l[i] <= p[i] && p[i] <= r[i])
                {
                    --ans;
                }
            }

            Assert(ans % 2 == 0);
            Prt(ans / 2);
        } // end Solver.solve
Пример #15
0
 private void Events_MapMouseEnter(BIT.AVL.Silver.Map.Map map, MouseEventArgs args)
 {
     VisualStateManager.GoToState(this, "MouseOver", true);
     if (IsEnabled)
     {
         _xCoordTextBox.Text = GetXCoordinate();
         _yCoordTextBox.Text = GetYCoordinate();
     }
 }
Пример #16
0
        private void Events_MapMouseMove(BIT.AVL.Silver.Map.Map map, MouseEventArgs args)
        {
            _LastMouseLocation = args.GetPosition(map);

            if (IsEnabled)
            {
                _xCoordTextBox.Text = GetXCoordinate();
                _yCoordTextBox.Text = GetYCoordinate();
            }
        }
Пример #17
0
        static bool ReadBiometric()
        {
            //Give some time in order to Load the whole configuration
            System.Threading.Thread.Sleep(1000);


            BiometricFacade biometricFacade = reader.GetBiometricFacade();

            try
            {
                biometricFacade.ReadBiometricInfoTemplates();
                BIT firstBit         = biometricFacade.FirstBit;
                BIT secondBit        = biometricFacade.SecondBit;
                int refDataQualifier = firstBit.ReferenceDataQualifier;

                Console.WriteLine("Please place your \"{0}\" over the biometric sensor:", GetFingerIndexType(firstBit.FingerIndex).Name);

                try
                {
                    SensorDevice sensor = new SagemSensorDevice();
                    // SensorDevice sensor = new DermalogSensorDevice
                    FingerIndexType fingerIndex = FingerIndexType.LEFT_INDEX_TYPE;
                    FTP_Image       image       = sensor.CaptureImage(firstBit.FingerIndex);
                    BiometricFacade bio         = reader.GetBiometricFacade();
                    FTP_Template    template    = bio.ConvertImage(image, FormatType.ISO_19794_CS.Format);

                    if (image == null || image.Pixels == null)
                    {
                        return(false);
                    }


                    bool result = biometricFacade.MatchOnCard(firstBit, template);
                    //bool result = biometricFacade.MatchOffCard(firstBit, template);

                    //int result = biometricFacade.ReadFingerprints();

                    Console.WriteLine("Is Valid? {0}", result);
                }
                catch (MiddlewareException ex)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Sensor Error: {0}", ex.Message);
                    Console.ResetColor();
                }
            }
            catch (MiddlewareException ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Biometric error: {0}", ex.Message);
                Console.ResetColor();
            }

            return(false);
        }
Пример #18
0
 void bitWrite(ref byte value, byte bit, BIT b)
 {
     if (b == BIT.SET)
     {
         bitSet(ref value, bit);
     }
     else
     {
         bitClear(ref value, bit);
     }
 }
Пример #19
0
    public void Solve()
    {
        var h = new HashSet <long>();

        h.Add(0);
        for (int i = 0; i < N; i++)
        {
            h.Add(A[i]);
        }
        var l = h.ToList();

        l.Sort();
        var dic = new Dictionary <long, int>();

        for (int i = 0; i < l.Count; i++)
        {
            dic.Add(l[i], i);
        }


        long       max = 0;
        List <int> pos = new List <int>();

        for (int i = 0; i < N; i++)
        {
            if (max < A[i])
            {
                pos.Add(i);
                max = A[i];
            }
        }

        var cntBT = new BIT(N);
        var totBT = new BIT(N);

        for (int i = 0; i < N; i++)
        {
            cntBT.Add(dic[A[i]] + 1, 1);
            totBT.Add(dic[A[i]] + 1, A[i]);
        }

        long total = A.Sum();
        long done  = 0;

        long[] ans = new long[N];
        for (int i = pos.Count - 1; i > 0; i--)
        {
            long del = (total - totBT.Sum(dic[A[pos[i - 1]]])) - A[pos[i - 1]] * (N - cntBT.Sum(dic[A[pos[i - 1]]]));
            ans[pos[i]] = del - done;
            done        = del;
        }
        ans[0] = total - done;
        Console.WriteLine(String.Join("\n", ans));
    }
Пример #20
0
        public TileSource(BIT.AVL.Silver.Map.Map mapInstance)
            : base(
                   (int)Math.Pow(2, DefaultMaxZoomLevel) * DefaultTileSize,
                   (int)Math.Pow(2, DefaultMaxZoomLevel) * DefaultTileSize,
                   DefaultTileSize,
                   DefaultTileSize,
                    0)
        {
            map = mapInstance;

        }
Пример #21
0
    public void Solve()
    {
        for (int i = 0; i < N; i++)
        {
            A[i] -= K;
        }
        long[] sum = new long[N + 1];
        for (int i = 0; i < N; i++)
        {
            sum[i + 1] = sum[i] + A[i];
        }
        long Inf = (long)1e18;

        HashSet <long> H = new HashSet <long>();

        H.Add(-Inf);
        H.Add(Inf);
        H.Add(0);
        foreach (var v in sum)
        {
            H.Add(v);
        }
        var L = H.ToList();

        L.Sort();
        var dic = new Dictionary <long, int>();

        for (int i = 0; i < L.Count; i++)
        {
            dic.Add(L[i], i);
        }

        int NN = N * 2;
        var BT = new BIT(NN);

        for (int i = 1; i <= N; i++)
        {
            BT.Add(dic[sum[i]] + 1, 1);
        }

        long ans = 0;

        ans += N - BT.Sum(dic[L[dic[0]]]);
        BT.Add(dic[sum[1]] + 1, -1);
        BT.Add(dic[-Inf] + 1, 1);
        for (int i = 1; i < N; i++)
        {
            ans += N - BT.Sum(dic[L[dic[sum[i]]]]);
            BT.Add(dic[sum[i + 1]] + 1, -1);
            BT.Add(dic[-Inf] + 1, 1);
        }

        Console.WriteLine(ans);
    }
Пример #22
0
    static void Main(string [] args)
    {
        int [] a   = { 3, 6, 1, 7, 2, 8, 4, 9, 10 };
        var    bit = new BIT(a.Length);

        bit.Build(a);
        bit.Print();
        Console.WriteLine(bit.Sum(a.Length - 1));
        bit.Update(3, 2);
        Console.WriteLine(bit.Sum(1, 3));
    }
Пример #23
0
    public static long Inversion(int[] s)
    {
        var ans = 0L;
        var bit = new BIT(s.Length);

        for (var j = 0; j < s.Length; j++)
        {
            ans += j - bit.Sum(s[j]);
            bit.Add(s[j], 1);
        }
        return(ans);
    }
Пример #24
0
    public static long InversionNumber(int n, int[] a)
    {
        var r   = 0L;
        var bit = new BIT(n);

        for (int i = 0; i < n; ++i)
        {
            r += i - bit.Sum(a[i]);
            bit.Add(a[i], 1);
        }
        return(r);
    }
Пример #25
0
    static long Solve()
    {
        var S = ReadLine();
        var s = S.Select(c => c - 'a').ToArray();
        int N = S.Length, odd = 0, mid = -1;
        var cnt = new int[26];

        foreach (var c in s)
        {
            cnt[c]++;
        }
        for (var c = 0; c < 26; c++)
        {
            if (cnt[c] % 2 == 1)
            {
                mid = c; odd++;
            }
            cnt[c] /= 2;
        }
        if (odd > 1)
        {
            return(-1);
        }
        var left = new List <int>();

        foreach (var c in s)
        {
            if (cnt[c] > 0)
            {
                cnt[c]--; left.Add(c);
            }
        }
        int[] t = new int[N], ind = new int[26], p = new int[N];
        for (var i = 0; i < left.Count; i++)
        {
            t[N - 1 - i] = t[i] = left[i];
        }
        if (mid >= 0)
        {
            t[N / 2] = mid;
        }
        for (var i = 0; i < N; i++)
        {
            var c = s[i];
            while (t[ind[c]] != c)
            {
                ind[c]++;
            }
            p[i] = ind[c]++;
        }
        return(BIT.Inversion(p));
    }
Пример #26
0
        /// <summary>
        /// MouseControl Constructor, will use the default instance of the map
        /// </summary>
        /// <param name="map">Instance of Map</param>
        public MouseControl(BIT.AVL.Silver.Map.Map map)
        {
            _Map = map;
            DefaultStyleKey = typeof(MouseControl);

            // Test IsDesignTime, to help display control in blend correctly
            if(HtmlPage.IsEnabled)
            {
                HtmlPage.Document.AttachEvent("DOMMouseScroll", OnMouseWheelFirefox);
                HtmlPage.Document.AttachEvent("onmousewheel", OnMouseWheelOther);
                IsWheelEnabled = true;
            }
        }
Пример #27
0
    static void Main()
    {
        var n = int.Parse(Console.ReadLine());
        var a = Console.ReadLine().Split().Select(int.Parse).Select((x, i) => new { x, i }).OrderBy(_ => _.x).ToArray();

        var st = new BIT(n);
        var r  = 0L;

        for (int i = 0; i < n; i++)
        {
            r += st.Sum(a[i].i + 1, n + 1);
            st.Add(a[i].i + 1, 1);
        }
        Console.WriteLine(r);
    }
Пример #28
0
 /// <summary>
 /// A Raster Tile Layer for the map
 /// </summary>
 /// <param name="map">Instance of the map in which to create the layer</param>
 public TileLayer(BIT.AVL.Silver.Map.Map map)
 {
     _Map = map;
     _Msi = new MultiScaleImage();
     Children.Add(_Msi);
     _Msi.Loaded += _Msi_Loaded;
     _Msi.LayoutUpdated += (o, e) => CheckViewBounds();
     _Msi.MotionFinished += (o, e) => _Map.Events.ZoomEnded(_Map, new MapEventArgs());
     _LastViewWidth = _Msi.ViewportWidth;
     _Msi.ViewportChanged += _Msi_ViewportChanged;
     Overlays = new ObservableCollection<ITileSource>();
    
     //This null TileSource allows the MSI to size itself correctly and earlier
     _Msi.Source = new TileSource(map);            
 }
Пример #29
0
    public static void Main()
    {
        var       n   = NextInt;
        BIT <int> bit = new BIT <int>(100001, 0, Max);

        foreach (var boxes in Enumerable.Repeat(0, n).Select(_ => new Box()
        {
            X = NextInt, Y = NextInt
        }).GroupBy(x => x.X).OrderBy(x => x.Key))
        {
            foreach (var item in boxes.Select(x => new { Pos = x.Y, Res = bit.Query(x.Y) }).ToArray())
            {
                bit.Operate(item.Pos, item.Res + 1);
            }
        }
        var res = bit.Query(bit.Size);

        Console.WriteLine(res);
    }
Пример #30
0
    static void Main()
    {
        Console.WriteLine("I love you");
        int [] arr = { 4, 6, 1, 8, 3, 2, 9, 0, 5, 7 };
        var    bit = new BIT(arr);

        bit.Display();
        Console.WriteLine();
        for (int i = 0; i < arr.Length; i++)
        {
            Console.Write(bit.Sum(i) + " ");
        }
        bit.Update(10, 7);
        Console.WriteLine();
        for (int i = 0; i < arr.Length; i++)
        {
            Console.Write(bit.Sum(i) + " ");
        }
        Console.Write(bit.Sum(1) - bit.Sum(0));
    }
Пример #31
0
    static void Main()
    {
        int           n       = NextInt;
        var           q       = NextInt;
        BIT <int>     bit     = new BIT <int>(n + 1, 0, (x, y) => x + y);
        StringBuilder builder = new StringBuilder();

        for (int i = 0; i < q; i++)
        {
            if (NextInt == 0)
            {
                bit.Operate(NextInt, NextInt);
            }
            else
            {
                builder.AppendLine((-bit.Query(NextInt - 1) + bit.Query(NextInt)).ToString());
            }
        }
        Console.Write(builder.ToString());
    }
Пример #32
0
    static object Solve()
    {
        var(n, k) = ((int, long))Read2L();
        var a = Read();

        var compMap = new CompressionHashMap(a);

        a = compMap.Compressed;
        a = Array.ConvertAll(a, x => x + 1);

        var left = GetLeft(n, k, a);

        var bit = new BIT(n + 1);

        bit[1] = 1;
        for (int i = 0; i < n; i++)
        {
            bit[i + 2] = bit.Sum(left[i] + 1, i + 2) % M;
        }
        return(bit[n + 1]);
    }
Пример #33
0
    static void Main()
    {
        var k = int.Parse(Console.ReadLine());
        var a = new int[k].Select(_ => { Console.ReadLine(); return(Read()); }).ToArray();

        Console.ReadLine();
        var b = Read();

        var t   = a.Select(ai => Tally(ai, 20)).ToArray();
        var inv = a.Select(ai =>
        {
            var sum = 0L;
            var bit = new BIT(20);
            foreach (var x in ai)
            {
                sum += bit.Sum(x + 1, 21);
                bit.Add(x, 1);
            }
            return(sum);
        }).ToArray();

        var st = new BIT(20);
        var r  = 0L;

        foreach (var bi in b)
        {
            for (int x = 1; x <= 20; x++)
            {
                r = (r + st.Sum(x + 1, 21) * t[bi - 1][x]) % M;
            }
            r = (r + inv[bi - 1]) % M;

            for (int x = 1; x <= 20; x++)
            {
                st.Add(x, t[bi - 1][x]);
            }
        }

        Console.WriteLine(r);
    }
Пример #34
0
    public static void Main()
    {
        int n        = int.Parse(Console.ReadLine());
        var a        = Console.ReadLine().Split().Select(int.Parse).ToArray();
        var compress = a.Distinct().OrderByDescending(x => x).Select((Elem, Count) => new { Elem, Count }).ToDictionary(x => x.Elem, x => x.Count);

        long res = 0;

        for (int i = 0; i < n; i++)
        {
            //一点加算/区間和が可能なBinary Indexed Tree(BIT)
            BIT <int> bit = new BIT <int>(compress.Count, 0, (x, y) => x + y);
            for (int k = i + 1; k < n; k++)
            {
                //max(a_i, a_k)より大きい要素の数の和(座標圧縮先のindexに直してからquery)
                res += bit.Query(compress[Max(a[i], a[k])]);
                //今の点についてBITに追加
                bit.Operate(compress[a[k]], 1);
            }
        }
        Console.WriteLine(res);
    }
Пример #35
0
    static void Main()
    {
        BIT <int>     bit     = new BIT <int>(NextInt + 1, 0, (x, y) => x + y);
        int           q       = NextInt;
        StringBuilder builder = new StringBuilder();

        for (int i = 0; i < q; i++)
        {
            if (NextInt == 0)
            {
                var l = NextInt;
                var r = NextInt;
                var x = NextInt;
                bit.Operate(l, x);
                bit.Operate(r + 1, -x);
            }
            else
            {
                builder.AppendLine(bit.Query(NextInt).ToString());
            }
        }
        Console.Write(builder.ToString());
    }
Пример #36
0
    static void Validate(int n)
    {
        Random     rng = new Random();
        var        res = Enumerable.Range(1, n).OrderBy(x => rng.Next()).ToArray();
        BIT <long> bit = new BIT <long>(n + 1, 0, (x, y) => x + y);

        long[] a = new long[n];
        for (int i = 0; i < res.Length; i++)
        {
            a[i] = bit.Query(res[i]);
            bit.Operate(res[i], res[i]);
        }
        System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
        watch.Start();
        var ans = Solve(n, a);

        Console.WriteLine(watch.ElapsedMilliseconds);
        if (res.Zip(ans, (x, y) => x != y).Any(x => x))
        {
            Console.WriteLine(string.Join(" ", res));
            Console.WriteLine(string.Join(" ", Solve(n, a)));
            Console.WriteLine(string.Join(" ", a));
        }
    }
Пример #37
0
 void Events_MapViewChanged(BIT.AVL.Silver.Map.Map map, MapEventArgs args)
 {
     _ScaleTextBox.Text = GetMapScale(map);
 }
Пример #38
0
 private void Events_MapMouseEnter(BIT.AVL.Silver.Map.Map map, MouseEventArgs args)
 {
     VisualStateManager.GoToState(this, "MouseOver", true);
 }
Пример #39
0
 private void Events_MapMouseLeave(BIT.AVL.Silver.Map.Map map, MouseEventArgs args)
 {
     VisualStateManager.GoToState(this, "Normal", true);
 }
Пример #40
0
        //****************************************************************************
        //メソッド名:OutBit(指定ポートにビット単位での出力)
        //引数:引数�@ ポート名("P00"、"P01"・・・"P07")引数�A出力値(H:0/ L: 1)
        //戻り値:正常0、異常1
        //****************************************************************************
        public int OutBit(PORT pName, BIT bName, OUT data)
        {
            //ポートの特定
            byte PortOutData = 0;

            switch (pName)
            {
            case PORT.P0:
                this.Port   = EPX64R_PORT0;
                PortOutData = this.p0Outdata;
                break;

            case PORT.P1:
                this.Port   = EPX64R_PORT1;
                PortOutData = this.p1Outdata;
                break;

            case PORT.P2:
                this.Port   = EPX64R_PORT2;
                PortOutData = this.p2Outdata;
                break;

            case PORT.P3:
                this.Port   = EPX64R_PORT3;
                PortOutData = this.p3Outdata;
                break;

            case PORT.P4:
                this.Port   = EPX64R_PORT4;
                PortOutData = this.p4Outdata;
                break;

            case PORT.P5:
                this.Port   = EPX64R_PORT5;
                PortOutData = this.p5Outdata;
                break;

            case PORT.P6:
                this.Port   = EPX64R_PORT6;
                PortOutData = this.p6Outdata;
                break;

            case PORT.P7:
                this.Port   = EPX64R_PORT7;
                PortOutData = this.p7Outdata;
                break;

            default:
                return(1);
            }

            //ビットの特定
            byte Temp = 0;
            int  Num  = 0;

            switch (bName)
            {
            case BIT.b0:
                Num = 0; Temp = 0xFE;
                break;

            case BIT.b1:
                Num = 1; Temp = 0xFD;
                break;

            case BIT.b2:
                Num = 2; Temp = 0xFB;
                break;

            case BIT.b3:
                Num = 3; Temp = 0xF7;
                break;

            case BIT.b4:
                Num = 4; Temp = 0xEF;
                break;

            case BIT.b5:
                Num = 5; Temp = 0xDF;
                break;

            case BIT.b6:
                Num = 6; Temp = 0xBF;
                break;

            case BIT.b7:
                Num = 7; Temp = 0x7F;
                break;
            }


            //データの出力
            byte Data = 0;

            switch (data)
            {
            case OUT.H:
                Data = 1;
                break;

            case OUT.L:
                Data = 0;
                break;
            }


            byte OutputValue = (byte)((PortOutData & Temp) | (Data << Num));//byteでキャストしないと怒られる
            int  flag        = EPX64R.EPX64R_OutputPort(this.hDevice, Port, OutputValue);

            if (flag != EPX64R.EPX64R_OK)
            {
                EPX64R.EPX64R_Close(this.hDevice);   // Device Close
                //MessageBox.Show("EPX64R_OutputPort() Error");
                return(1);
            }

            switch (pName)
            {
            case PORT.P0:
                this.p0Outdata = OutputValue;
                break;

            case PORT.P1:
                this.p1Outdata = OutputValue;
                break;

            case PORT.P2:
                this.p2Outdata = OutputValue;
                break;

            case PORT.P3:
                this.p3Outdata = OutputValue;
                break;

            case PORT.P4:
                this.p4Outdata = OutputValue;
                break;

            case PORT.P5:
                this.p5Outdata = OutputValue;
                break;

            case PORT.P6:
                this.p6Outdata = OutputValue;
                break;

            case PORT.P7:
                this.p7Outdata = OutputValue;
                break;
            }
            return(0);
        }
Пример #41
0
 /// <summary>
 /// MapEvents constructor, will use the specific instance of the map
 /// </summary>
 public MapEvents(BIT.AVL.Silver.Map.Map map)
 {
     _Map = map;
 }
Пример #42
0
    public void Solve()
    {
        int N    = S.Length;
        int M    = T.Length;
        var BTSA = new BIT(N);
        var BTSB = new BIT(N);
        var BTTA = new BIT(N);
        var BTTB = new BIT(N);

        for (int i = 0; i < N; i++)
        {
            if (S[i] == 'A')
            {
                BTSA.Add(i + 1, 1);
            }
            if (S[i] == 'B')
            {
                BTSB.Add(i + 1, 1);
            }
        }
        for (int i = 0; i < M; i++)
        {
            if (T[i] == 'A')
            {
                BTTA.Add(i + 1, 1);
            }
            if (T[i] == 'B')
            {
                BTTB.Add(i + 1, 1);
            }
        }

        int[][] jud = new int[3][];
        jud[0] = new int[] { 0, -1, 1 };
        jud[1] = new int[] { 1, 0, -1 };
        jud[2] = new int[] { -1, 1, 0 };


        var sbd = new StringBuilder();

        for (int q = 0; q < Q; q++)
        {
            int a  = Query[q][0];
            int b  = Query[q][1];
            int c  = Query[q][2];
            int d  = Query[q][3];
            int sa = BTSA.Sum(b) - BTSA.Sum(a - 1);
            int sb = BTSB.Sum(b) - BTSB.Sum(a - 1);
            int ta = BTTA.Sum(d) - BTTA.Sum(c - 1);
            int tb = BTTB.Sum(d) - BTTB.Sum(c - 1);

            sa %= 3;
            sb %= 3;
            ta %= 3;
            tb %= 3;

            if (jud[sa][sb] == jud[ta][tb])
            {
                sbd.AppendLine("YES");
            }
            else
            {
                sbd.AppendLine("NO");
            }
        }
        Console.Write(sbd.ToString());
    }
Пример #43
0
 private void RaiseIfMouseDrag(BIT.AVL.Silver.Map.Map map, MouseEventArgs args)
 {
     if(EnableMouseClicks && _IsMouseDown)
     {
         if(_LastClick != 0)
         {
             //If we are not zooming, go to drag right away, otherwise delay to not conflict with a double click zoom.
             if(_InZoom == false || (DateTime.Now.Ticks - _LastClick) > MouseDragDelay) // (TimeSpan.FromSeconds(0.15).TotalMilliseconds * 10000)	
             {
                 if(MapMouseDrag != null) MapMouseDrag(map, args);
             }
         }
     }
 }
Пример #44
0
 internal void RotationChanged(BIT.AVL.Silver.Map.Map map, MapEventArgs args)
 {
     if(MapRotationChanged != null) MapRotationChanged(map, args);
 }
Пример #45
0
 private void Events_MapMouseLeave(BIT.AVL.Silver.Map.Map map, MouseEventArgs args)
 {
     VisualStateManager.GoToState(this, "Normal", true);
     _xCoordTextBox.Text = GetXCoordinate();
     _yCoordTextBox.Text = GetYCoordinate();
 }
Пример #46
0
 internal void ZoomStarted(BIT.AVL.Silver.Map.Map map, MapEventArgs args)
 {
     _InZoom = true;
     if(MapZoomStarted != null) MapZoomStarted(map, args);
 }
Пример #47
0
 internal void ViewChanged(BIT.AVL.Silver.Map.Map map, MapEventArgs args)
 {
     //Note this operation exists to eliminate the high volume of insignificant updates from MSI.ViewUpdated
     //Uses the sum of squares to determine distance moved.
     //The MSI woble effect seeems to occur at ~ a .03% of the logical display.  
     //So seeting the change tolerance at .05 eliminates much of the woble effect especially post zoom.
     double distLogChange = Math.Sqrt(Math.Pow(_Map.LogicalOrigin.X - _PriorOrigin.X, 2) + Math.Pow(_Map.LogicalOrigin.Y - _PriorOrigin.Y, 2));
     double changeSignificance = 100 * distLogChange / _Map.MapViewLogicalSize.Width;
     if(changeSignificance > ChangeSignificanceThreshold)
     {
         _PriorOrigin = _Map.LogicalOrigin;
         RaiseZoomChanged(map, map.ZoomLevel);
         if(MapViewChanged != null) MapViewChanged(map, args);
     }
 }
Пример #48
0
 internal void ZoomEnded(BIT.AVL.Silver.Map.Map map, MapEventArgs args)
 {
     _InZoom = false;
     if(MapZoomEnded != null) MapZoomEnded(map, args);
 }
Пример #49
0
 internal void TileSourceChanged(BIT.AVL.Silver.Map.Map map, MapEventArgs args)
 {
     if(MapTileSourceChanged != null) MapTileSourceChanged(map, args);
 }
Пример #50
0
 public CoordControl(BIT.AVL.Silver.Map.Map map)
 {
     _Map = map;
     DefaultStyleKey = typeof (CoordControl);
 }
Пример #51
0
 private void Events_MapZoomChanged(BIT.AVL.Silver.Map.Map map, double zoomLevel)
 {
     _ScaleTextBox.Text = GetMapScale(map);
 }
Пример #52
0
 private void RaiseZoomChanged(BIT.AVL.Silver.Map.Map map, double zoom)
 {
     if(_LastZoom != zoom)
     {
         _LastZoom = zoom;
         ZoomChanged temp = MapZoomChanged;
         if(temp != null)
         {
             MapZoomChanged(map, zoom);
         }
     }
 }
Пример #53
0
    static void Main()
    {
        var s   = sc.Str;
        int n   = s.Length;
        var ind = new List <int> [26];

        for (int i = 0; i < 26; i++)
        {
            ind[i] = new List <int>();
        }
        var bit = new BIT(n);

        for (int i = 0; i < n; i++)
        {
            ind[s[i] - 'a'].Add(i);
            bit.add(i, 1);
        }
        int oc = 0;
        var l  = new int[26];
        var r  = new int[26];

        for (int i = 0; i < 26; i++)
        {
            r[i] = ind[i].Count - 1;
            if (ind[i].Count % 2 == 1)
            {
                ++oc;
            }
        }
        if (oc > 1)
        {
            DBG(-1);
            return;
        }
        long sum = 0;

        while (true)
        {
            int min = M, minid = -1;
            for (int i = 0; i < 26; i++)
            {
                if (l[i] >= r[i])
                {
                    continue;
                }
                int cos = (int)(bit.sum(ind[i][l[i]]) + bit.sum(ind[i][r[i]] + 1, n));
                if (cos < min)
                {
                    min   = cos;
                    minid = i;
                }
            }
            if (min == M)
            {
                break;
            }
            sum += min;
            bit.add(ind[minid][l[minid]], -1);
            bit.add(ind[minid][r[minid]], -1);
            ++l[minid];
            --r[minid];
        }
        Prt(sum);
        sw.Flush();
    }
Пример #54
0
 private void Events_MapZoomEnded(BIT.AVL.Silver.Map.Map map, MapEventArgs args)
 {
     _ScaleTextBox.Text = GetMapScale(map);
 }
Пример #55
0
 internal void MouseWheel(BIT.AVL.Silver.Map.Map map, MouseWheelEventArgs args)
 {
     if(EnableMouseWheel)
     {
         if(MapMouseWheel != null) MapMouseWheel(map, args);
     }
 }
Пример #56
0
 private static string GetMapScale(BIT.AVL.Silver.Map.Map map)
 {
     return "1:" + Math.Round(map.Scale, 0);
 }
Пример #57
0
 internal void MouseLeave(BIT.AVL.Silver.Map.Map map, MouseEventArgs args)
 {
     if(MapMouseLeave != null) MapMouseLeave(map, args);
 }
Пример #58
0
 /// <summary>
 /// ScaleControl Constructor, will use the specific instance of the map
 /// </summary>
 /// <param name="map">Instance of Map</param>
 public ScaleControl(BIT.AVL.Silver.Map.Map map)
 {
     _Map = map;
     DefaultStyleKey = typeof(ScaleControl);
 }
Пример #59
0
 internal void Loaded(BIT.AVL.Silver.Map.Map map, MapEventArgs args)
 {
     if(MapLoaded != null) MapLoaded(map, args);
 }
Пример #60
0
 internal void DragBehavourChanged(BIT.AVL.Silver.Map.Map map, MapEventArgs args)
 {
     if(MapDragBehavourChanged != null) MapDragBehavourChanged(map, args);
 }