紅色的幻想鄉

来源:http://www.cnblogs.com/Y-E-T-I/archive/2017/06/17/7041569.html
-Advertisement-
Play Games

題目背景 蕾米莉亞的紅霧異變失敗後,很不甘心。 題目描述 經過上次失敗後,蕾米莉亞決定再次發動紅霧異變,但為了防止被靈夢退治,她決定將紅霧以奇怪的陣勢釋放。 我們將幻想鄉看做是一個n*m的方格地區,一開始沒有任何一個地區被紅霧遮蓋。蕾米莉亞每次站在某一個地區上,向東南西北四個方向各發出一條無限長的紅 ...


題目背景

蕾米莉亞的紅霧異變失敗後,很不甘心。

題目描述

經過上次失敗後,蕾米莉亞決定再次發動紅霧異變,但為了防止被靈夢退治,她決定將紅霧以奇怪的陣勢釋放。

我們將幻想鄉看做是一個n*m的方格地區,一開始沒有任何一個地區被紅霧遮蓋。蕾米莉亞每次站在某一個地區上,向東南西北四個方向各發出一條無限長的紅霧,可以影響到整行/整列,但不會影響到她所站的那個地區。如果兩陣紅霧碰撞,則會因為密度過大而沉降消失。靈夢察覺到了這次異變,決定去解決它。但在解決之前,靈夢想要瞭解一片範圍紅霧的密度。可以簡述為兩種操作:

1 x y 蕾米莉亞站在坐標(x,y)的位置向四個方向釋放無限長的紅霧。

2 x1 y1 x2 y2 詢問左上點為(x1,y1),右下點為(x2,y2)的矩形範圍內,被紅霧遮蓋的地區的數量。

輸入輸出格式

輸入格式:

 

第一行三個整數n,m,q,表示幻想鄉大小為n*m,有q個詢問。

接下來q行,每行3個或5個整數,用空格隔開,含義見題目描述。

 

輸出格式:

 

對於每一個操作2,輸出一行一個整數,表示對應詢問的答案。

 

輸入輸出樣例

輸入樣例#1:
4 4 3
1 2 2
1 4 4
2 1 1 4 4
輸出樣例#1:
8

說明

樣例解釋:

用o表示沒有紅霧,x表示有紅霧,兩次釋放紅霧後幻想鄉地圖如下:

oxox

xoxo

oxox

xoxo

數據範圍:

對於20%的數據,1<=n,m,q<=200

對於 40%的數據,1<=n,m,q<=1000

對於100%的數據,1<=n,m,q<=100000

1<=x1,x2,x<=n x1<=x2

1<=y1,y2,y<=m y1<=y2

by-orangebird

 線段樹的運用。

用兩個線段樹表示行和列,維護第x行,第y列有沒有放過霧

由於兩片紅霧會抵消,相當於每次修改,對應行^=1,對應列^=1。

每一次詢問,即區間求和。令x=∑c1[x2-x1],y=∑c2[y2-y1];

由容斥原理,可知ans=x*(y2-y1+1)+y*(x2-x1+1)-x*y*2;

記得開long long

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int c1[400001],c2[400001],n,m,q;
void addh(int rt,int l,int r,int x)
{
	if (l==r)
	{
		c1[rt]^=1;
		return;
	}
	int mid=(l+r)/2;
	if (x<=mid) addh(rt*2,l,mid,x);
	else addh(rt*2+1,mid+1,r,x);
 c1[rt]=c1[rt*2]+c1[rt*2+1];
}
void addl(int rt,int l,int r,int x)
{
	if (l==r)
	{
		c2[rt]^=1;
		return;
	}
	int mid=(l+r)/2;
	if (x<=mid) addl(rt*2,l,mid,x);
	else addl(rt*2+1,mid+1,r,x);
 c2[rt]=c2[rt*2]+c2[rt*2+1];
}
int geth(int rt,int l,int r,int L,int R)
{
	if (l>=L&&r<=R)
	{
		return c1[rt];
	}
	 int mid=(l+r)/2; 
	int s=0;
	 if (L<=mid) s+=geth(rt*2,l,mid,L,R);
	 if (R>mid) s+=geth(rt*2+1,mid+1,r,L,R);
	return s;
}
int getl(int rt,int l,int r,int L,int R)
{
	if (l>=L&&r<=R)
	{
		return c2[rt];
	}
	 int mid=(l+r)/2; 
	int s=0;
	 if (L<=mid) s+=getl(rt*2,l,mid,L,R);
	 if (R>mid) s+=getl(rt*2+1,mid+1,r,L,R);
	return s;
}
int main()
{int i,j,ch,x,y,x1,x2,y1,y2;
   scanf("%d%d%d",&n,&m,&q);
    for (i=1;i<=q;i++)
    {
    	scanf("%d",&ch);
    	if (ch==1)
    	{
    		scanf("%d%d",&x,&y);
    		addh(1,1,n,x);
    		addl(1,1,n,y);
    	}
    	if (ch==2)
    	{
    		scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
                int x=geth(1,1,n,x1,x2);
		   int y=getl(1,1,n,y1,y2);
		   printf("%lld\n",y*(long long)(x2-x1+1)+x*(long long)(y2-y1+1)-(long long)x*y*2);		
    	}
    }
}

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 要求是這樣子的,在一個列表頁中,用戶點擊詳細銨鈕,帶記錄的主鍵值至另一頁。在另一外頁中,獲取記錄數據,然後顯示此記錄數據在網頁上。先用動圖演示: 昨天有分享為ng-click傳遞參數 《angularjs為ng-click事件傳遞參數》http://www.cnblogs.com/insus/p/7 ...
  • Java中的wait/notify/notifyAll可用來實現線程間通信,是Object類的方法,這三個方法都是native方法,是平臺相關的,常用來實現生產者/消費者模式。先來我們來看下相關定義: wait() :調用該方法的線程進入WATTING狀態,只有等待另外線程的通知或中斷才會返回,調用 ...
  • 第九節 函數 函數就是完成特定功能的一個語句組,這組語句可以作為一個單位使用,並且給它取一個名字。 可以通過函數名在程式的不同地方多次執行(這通常叫做函數調用),卻不需要在所有地方都重覆編寫這些語句。 自定義函數 用戶自己編寫的 預定義的Python函數 系統自帶的一些函數,還有一些和第三方編寫的函 ...
  • ActiveMQ支持的client-broker通訊協議有:TCP、NIO、UDP、SSL、Http(s)、VM。 其中配置Transport Connector的文件在activeMQ安裝目錄的conf/activemq.xml中的 ...
  • extract images from video, than save them to disk from moviepy.editor import VideoFileClip clip1 = VideoFileClip('./project_video.mp4') i = 1 for fram ...
  • 一、預設裝配方式 代碼通過getBean();方式從容器中獲取指定的Bean實例,容器首先會調用Bean類的無參構造器,創建空值的實例對象。 舉例: 首先我在applicationContext.xml配置文件中配置了一個bean: 創建SomeServiceImpl對象,但需要註意的是該類的只具有 ...
  • 前 言 PHP 學習了好久的PHP,今天做一個可以後臺交互的登錄頁和註冊頁,沒做什麼判斷,簡單的瞭解一下。 具體的內容分析如下: ① PHP中的數據傳輸-->>由註冊頁傳輸給註冊頁後臺-->>註冊頁後臺經過轉碼保存實例化的文件 ② 在登錄頁輸入賬戶密碼,點擊登錄時,獲得觸發函數:獲得由後臺傳輸過來的 ...
  • 1.==,is的使用 總結 ·is是比較兩個引用是否指向了同一個對象(引用比較)。 ·==是比較兩個對象是否相等。 2.深拷貝、淺拷貝 1.淺拷貝 淺拷貝是對於一個對象的頂層拷貝 通俗的理解是:拷貝了引用,並沒有拷貝內容 2.深拷貝 深拷貝是對於一個對象所有層次的拷貝(遞歸) 進一步理解拷貝 進一步 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...